{"nbformat":4,"nbformat_minor":0,"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.6.8"},"colab":{"name":"BERT-based movie_recommender.ipynb","provenance":[],"collapsed_sections":[],"toc_visible":true},"widgets":{"application/vnd.jupyter.widget-state+json":{"80acd9370fbe4993b0f228c448904923":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","state":{"_view_name":"HBoxView","_dom_classes":[],"_model_name":"HBoxModel","_view_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_view_count":null,"_view_module_version":"1.5.0","box_style":"","layout":"IPY_MODEL_0d0e5981669b413e80712704aac40df6","_model_module":"@jupyter-widgets/controls","children":["IPY_MODEL_070795ba80b34e2e8bfcc7cc84fdc6f1","IPY_MODEL_9f30ae648ad247ed89bf88c2fd5b1a1d"]}},"0d0e5981669b413e80712704aac40df6":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","state":{"_view_name":"LayoutView","grid_template_rows":null,"right":null,"justify_content":null,"_view_module":"@jupyter-widgets/base","overflow":null,"_model_module_version":"1.2.0","_view_count":null,"flex_flow":null,"width":null,"min_width":null,"border":null,"align_items":null,"bottom":null,"_model_module":"@jupyter-widgets/base","top":null,"grid_column":null,"overflow_y":null,"overflow_x":null,"grid_auto_flow":null,"grid_area":null,"grid_template_columns":null,"flex":null,"_model_name":"LayoutModel","justify_items":null,"grid_row":null,"max_height":null,"align_content":null,"visibility":null,"align_self":null,"height":null,"min_height":null,"padding":null,"grid_auto_rows":null,"grid_gap":null,"max_width":null,"order":null,"_view_module_version":"1.2.0","grid_template_areas":null,"object_position":null,"object_fit":null,"grid_auto_columns":null,"margin":null,"display":null,"left":null}},"070795ba80b34e2e8bfcc7cc84fdc6f1":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","state":{"_view_name":"ProgressView","style":"IPY_MODEL_67996e5c2f5e452882ba3b4f716b7ce0","_dom_classes":[],"description":"Downloading: 100%","_model_name":"FloatProgressModel","bar_style":"success","max":433,"_view_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","value":433,"_view_count":null,"_view_module_version":"1.5.0","orientation":"horizontal","min":0,"description_tooltip":null,"_model_module":"@jupyter-widgets/controls","layout":"IPY_MODEL_0fad55bfb5054db9beda3e9706740290"}},"9f30ae648ad247ed89bf88c2fd5b1a1d":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","state":{"_view_name":"HTMLView","style":"IPY_MODEL_75b37f74df754bbbad269dbe0e77dcc5","_dom_classes":[],"description":"","_model_name":"HTMLModel","placeholder":"​","_view_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","value":" 433/433 [00:00&lt;00:00, 993B/s]","_view_count":null,"_view_module_version":"1.5.0","description_tooltip":null,"_model_module":"@jupyter-widgets/controls","layout":"IPY_MODEL_408810d8df5b4c47aebf8bcd54a6a6e5"}},"67996e5c2f5e452882ba3b4f716b7ce0":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","state":{"_view_name":"StyleView","_model_name":"ProgressStyleModel","description_width":"initial","_view_module":"@jupyter-widgets/base","_model_module_version":"1.5.0","_view_count":null,"_view_module_version":"1.2.0","bar_color":null,"_model_module":"@jupyter-widgets/controls"}},"0fad55bfb5054db9beda3e9706740290":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","state":{"_view_name":"LayoutView","grid_template_rows":null,"right":null,"justify_content":null,"_view_module":"@jupyter-widgets/base","overflow":null,"_model_module_version":"1.2.0","_view_count":null,"flex_flow":null,"width":null,"min_width":null,"border":null,"align_items":null,"bottom":null,"_model_module":"@jupyter-widgets/base","top":null,"grid_column":null,"overflow_y":null,"overflow_x":null,"grid_auto_flow":null,"grid_area":null,"grid_template_columns":null,"flex":null,"_model_name":"LayoutModel","justify_items":null,"grid_row":null,"max_height":null,"align_content":null,"visibility":null,"align_self":null,"height":null,"min_height":null,"padding":null,"grid_auto_rows":null,"grid_gap":null,"max_width":null,"order":null,"_view_module_version":"1.2.0","grid_template_areas":null,"object_position":null,"object_fit":null,"grid_auto_columns":null,"margin":null,"display":null,"left":null}},"75b37f74df754bbbad269dbe0e77dcc5":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","state":{"_view_name":"StyleView","_model_name":"DescriptionStyleModel","description_width":"","_view_module":"@jupyter-widgets/base","_model_module_version":"1.5.0","_view_count":null,"_view_module_version":"1.2.0","_model_module":"@jupyter-widgets/controls"}},"408810d8df5b4c47aebf8bcd54a6a6e5":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","state":{"_view_name":"LayoutView","grid_template_rows":null,"right":null,"justify_content":null,"_view_module":"@jupyter-widgets/base","overflow":null,"_model_module_version":"1.2.0","_view_count":null,"flex_flow":null,"width":null,"min_width":null,"border":null,"align_items":null,"bottom":null,"_model_module":"@jupyter-widgets/base","top":null,"grid_column":null,"overflow_y":null,"overflow_x":null,"grid_auto_flow":null,"grid_area":null,"grid_template_columns":null,"flex":null,"_model_name":"LayoutModel","justify_items":null,"grid_row":null,"max_height":null,"align_content":null,"visibility":null,"align_self":null,"height":null,"min_height":null,"padding":null,"grid_auto_rows":null,"grid_gap":null,"max_width":null,"order":null,"_view_module_version":"1.2.0","grid_template_areas":null,"object_position":null,"object_fit":null,"grid_auto_columns":null,"margin":null,"display":null,"left":null}},"8b81bd05377b423b92d210ee6026d215":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","state":{"_view_name":"HBoxView","_dom_classes":[],"_model_name":"HBoxModel","_view_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_view_count":null,"_view_module_version":"1.5.0","box_style":"","layout":"IPY_MODEL_afe11a55aec842fa8691a8a13771a06f","_model_module":"@jupyter-widgets/controls","children":["IPY_MODEL_55f2949c3bbc45d380f96120fde9cb0c","IPY_MODEL_c340f86e52204715a4169a2a6c02c9a4"]}},"afe11a55aec842fa8691a8a13771a06f":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","state":{"_view_name":"LayoutView","grid_template_rows":null,"right":null,"justify_content":null,"_view_module":"@jupyter-widgets/base","overflow":null,"_model_module_version":"1.2.0","_view_count":null,"flex_flow":null,"width":null,"min_width":null,"border":null,"align_items":null,"bottom":null,"_model_module":"@jupyter-widgets/base","top":null,"grid_column":null,"overflow_y":null,"overflow_x":null,"grid_auto_flow":null,"grid_area":null,"grid_template_columns":null,"flex":null,"_model_name":"LayoutModel","justify_items":null,"grid_row":null,"max_height":null,"align_content":null,"visibility":null,"align_self":null,"height":null,"min_height":null,"padding":null,"grid_auto_rows":null,"grid_gap":null,"max_width":null,"order":null,"_view_module_version":"1.2.0","grid_template_areas":null,"object_position":null,"object_fit":null,"grid_auto_columns":null,"margin":null,"display":null,"left":null}},"55f2949c3bbc45d380f96120fde9cb0c":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","state":{"_view_name":"ProgressView","style":"IPY_MODEL_b1d905aa87514c4195b4f55d5bd2e4d0","_dom_classes":[],"description":"Downloading: 100%","_model_name":"FloatProgressModel","bar_style":"success","max":440473133,"_view_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","value":440473133,"_view_count":null,"_view_module_version":"1.5.0","orientation":"horizontal","min":0,"description_tooltip":null,"_model_module":"@jupyter-widgets/controls","layout":"IPY_MODEL_37c0d6c06d5b4335995f6f72b93552d7"}},"c340f86e52204715a4169a2a6c02c9a4":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","state":{"_view_name":"HTMLView","style":"IPY_MODEL_98ef0c080aad443ea696c4aea9ff02c6","_dom_classes":[],"description":"","_model_name":"HTMLModel","placeholder":"​","_view_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","value":" 440M/440M [00:24&lt;00:00, 18.1MB/s]","_view_count":null,"_view_module_version":"1.5.0","description_tooltip":null,"_model_module":"@jupyter-widgets/controls","layout":"IPY_MODEL_b323f97c4ae84d79804664d498bec7ff"}},"b1d905aa87514c4195b4f55d5bd2e4d0":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","state":{"_view_name":"StyleView","_model_name":"ProgressStyleModel","description_width":"initial","_view_module":"@jupyter-widgets/base","_model_module_version":"1.5.0","_view_count":null,"_view_module_version":"1.2.0","bar_color":null,"_model_module":"@jupyter-widgets/controls"}},"37c0d6c06d5b4335995f6f72b93552d7":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","state":{"_view_name":"LayoutView","grid_template_rows":null,"right":null,"justify_content":null,"_view_module":"@jupyter-widgets/base","overflow":null,"_model_module_version":"1.2.0","_view_count":null,"flex_flow":null,"width":null,"min_width":null,"border":null,"align_items":null,"bottom":null,"_model_module":"@jupyter-widgets/base","top":null,"grid_column":null,"overflow_y":null,"overflow_x":null,"grid_auto_flow":null,"grid_area":null,"grid_template_columns":null,"flex":null,"_model_name":"LayoutModel","justify_items":null,"grid_row":null,"max_height":null,"align_content":null,"visibility":null,"align_self":null,"height":null,"min_height":null,"padding":null,"grid_auto_rows":null,"grid_gap":null,"max_width":null,"order":null,"_view_module_version":"1.2.0","grid_template_areas":null,"object_position":null,"object_fit":null,"grid_auto_columns":null,"margin":null,"display":null,"left":null}},"98ef0c080aad443ea696c4aea9ff02c6":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","state":{"_view_name":"StyleView","_model_name":"DescriptionStyleModel","description_width":"","_view_module":"@jupyter-widgets/base","_model_module_version":"1.5.0","_view_count":null,"_view_module_version":"1.2.0","_model_module":"@jupyter-widgets/controls"}},"b323f97c4ae84d79804664d498bec7ff":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","state":{"_view_name":"LayoutView","grid_template_rows":null,"right":null,"justify_content":null,"_view_module":"@jupyter-widgets/base","overflow":null,"_model_module_version":"1.2.0","_view_count":null,"flex_flow":null,"width":null,"min_width":null,"border":null,"align_items":null,"bottom":null,"_model_module":"@jupyter-widgets/base","top":null,"grid_column":null,"overflow_y":null,"overflow_x":null,"grid_auto_flow":null,"grid_area":null,"grid_template_columns":null,"flex":null,"_model_name":"LayoutModel","justify_items":null,"grid_row":null,"max_height":null,"align_content":null,"visibility":null,"align_self":null,"height":null,"min_height":null,"padding":null,"grid_auto_rows":null,"grid_gap":null,"max_width":null,"order":null,"_view_module_version":"1.2.0","grid_template_areas":null,"object_position":null,"object_fit":null,"grid_auto_columns":null,"margin":null,"display":null,"left":null}},"fd9cf9cb927446cab1c7d98154bac52e":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","state":{"_view_name":"HBoxView","_dom_classes":[],"_model_name":"HBoxModel","_view_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_view_count":null,"_view_module_version":"1.5.0","box_style":"","layout":"IPY_MODEL_f613a44183e14483b61dce20310541af","_model_module":"@jupyter-widgets/controls","children":["IPY_MODEL_427e49fdfc9a4ac7bddcefe75229c580","IPY_MODEL_1d22891a64d54aa8b513b2b0f7c7b1de"]}},"f613a44183e14483b61dce20310541af":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","state":{"_view_name":"LayoutView","grid_template_rows":null,"right":null,"justify_content":null,"_view_module":"@jupyter-widgets/base","overflow":null,"_model_module_version":"1.2.0","_view_count":null,"flex_flow":null,"width":null,"min_width":null,"border":null,"align_items":null,"bottom":null,"_model_module":"@jupyter-widgets/base","top":null,"grid_column":null,"overflow_y":null,"overflow_x":null,"grid_auto_flow":null,"grid_area":null,"grid_template_columns":null,"flex":null,"_model_name":"LayoutModel","justify_items":null,"grid_row":null,"max_height":null,"align_content":null,"visibility":null,"align_self":null,"height":null,"min_height":null,"padding":null,"grid_auto_rows":null,"grid_gap":null,"max_width":null,"order":null,"_view_module_version":"1.2.0","grid_template_areas":null,"object_position":null,"object_fit":null,"grid_auto_columns":null,"margin":null,"display":null,"left":null}},"427e49fdfc9a4ac7bddcefe75229c580":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","state":{"_view_name":"ProgressView","style":"IPY_MODEL_4e0c8de536974c26afe729920729e108","_dom_classes":[],"description":"Downloading: 100%","_model_name":"FloatProgressModel","bar_style":"success","max":231508,"_view_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","value":231508,"_view_count":null,"_view_module_version":"1.5.0","orientation":"horizontal","min":0,"description_tooltip":null,"_model_module":"@jupyter-widgets/controls","layout":"IPY_MODEL_094f0232621b47408ddf6cf42b20d2c6"}},"1d22891a64d54aa8b513b2b0f7c7b1de":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","state":{"_view_name":"HTMLView","style":"IPY_MODEL_316aa3b6500447a59d8e83449302db4e","_dom_classes":[],"description":"","_model_name":"HTMLModel","placeholder":"​","_view_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","value":" 232k/232k [00:00&lt;00:00, 1.92MB/s]","_view_count":null,"_view_module_version":"1.5.0","description_tooltip":null,"_model_module":"@jupyter-widgets/controls","layout":"IPY_MODEL_bca663fa5bb44cb5bab7337a9edff9ba"}},"4e0c8de536974c26afe729920729e108":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","state":{"_view_name":"StyleView","_model_name":"ProgressStyleModel","description_width":"initial","_view_module":"@jupyter-widgets/base","_model_module_version":"1.5.0","_view_count":null,"_view_module_version":"1.2.0","bar_color":null,"_model_module":"@jupyter-widgets/controls"}},"094f0232621b47408ddf6cf42b20d2c6":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","state":{"_view_name":"LayoutView","grid_template_rows":null,"right":null,"justify_content":null,"_view_module":"@jupyter-widgets/base","overflow":null,"_model_module_version":"1.2.0","_view_count":null,"flex_flow":null,"width":null,"min_width":null,"border":null,"align_items":null,"bottom":null,"_model_module":"@jupyter-widgets/base","top":null,"grid_column":null,"overflow_y":null,"overflow_x":null,"grid_auto_flow":null,"grid_area":null,"grid_template_columns":null,"flex":null,"_model_name":"LayoutModel","justify_items":null,"grid_row":null,"max_height":null,"align_content":null,"visibility":null,"align_self":null,"height":null,"min_height":null,"padding":null,"grid_auto_rows":null,"grid_gap":null,"max_width":null,"order":null,"_view_module_version":"1.2.0","grid_template_areas":null,"object_position":null,"object_fit":null,"grid_auto_columns":null,"margin":null,"display":null,"left":null}},"316aa3b6500447a59d8e83449302db4e":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","state":{"_view_name":"StyleView","_model_name":"DescriptionStyleModel","description_width":"","_view_module":"@jupyter-widgets/base","_model_module_version":"1.5.0","_view_count":null,"_view_module_version":"1.2.0","_model_module":"@jupyter-widgets/controls"}},"bca663fa5bb44cb5bab7337a9edff9ba":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","state":{"_view_name":"LayoutView","grid_template_rows":null,"right":null,"justify_content":null,"_view_module":"@jupyter-widgets/base","overflow":null,"_model_module_version":"1.2.0","_view_count":null,"flex_flow":null,"width":null,"min_width":null,"border":null,"align_items":null,"bottom":null,"_model_module":"@jupyter-widgets/base","top":null,"grid_column":null,"overflow_y":null,"overflow_x":null,"grid_auto_flow":null,"grid_area":null,"grid_template_columns":null,"flex":null,"_model_name":"LayoutModel","justify_items":null,"grid_row":null,"max_height":null,"align_content":null,"visibility":null,"align_self":null,"height":null,"min_height":null,"padding":null,"grid_auto_rows":null,"grid_gap":null,"max_width":null,"order":null,"_view_module_version":"1.2.0","grid_template_areas":null,"object_position":null,"object_fit":null,"grid_auto_columns":null,"margin":null,"display":null,"left":null}}}}},"cells":[{"cell_type":"markdown","metadata":{"id":"4GKjLIFa8nDL"},"source":["# **BERT-based (using BERT to extract features) 电影推荐系统**\n","本项目使用深度神经网络，并使用[`MovieLens1M`](https://grouplens.org/datasets/movielens/)数据集完成电影推荐的任务。\n","\n"]},{"cell_type":"markdown","metadata":{"id":"RkiSotsC8nDi"},"source":["## **0. 加载包**"]},{"cell_type":"code","metadata":{"id":"wC_uaNDAQkUw","executionInfo":{"status":"ok","timestamp":1605509693524,"user_tz":-480,"elapsed":10072,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}},"outputId":"4d1a4cfd-470c-470c-c333-5c208ba595ca","colab":{"base_uri":"https://localhost:8080/"}},"source":["! pip3 install sentence_transformers"],"execution_count":1,"outputs":[{"output_type":"stream","text":["Collecting sentence_transformers\n","\u001b[?25l  Downloading https://files.pythonhosted.org/packages/f4/fd/0190080aa0af78d7cd5874e4e8e85f0bed9967dd387cf05d760832b95da9/sentence-transformers-0.3.8.tar.gz (66kB)\n","\u001b[K     |████████████████████████████████| 71kB 3.2MB/s \n","\u001b[?25hCollecting transformers<3.4.0,>=3.1.0\n","\u001b[?25l  Downloading https://files.pythonhosted.org/packages/19/22/aff234f4a841f8999e68a7a94bdd4b60b4cebcfeca5d67d61cd08c9179de/transformers-3.3.1-py3-none-any.whl (1.1MB)\n","\u001b[K     |████████████████████████████████| 1.1MB 8.0MB/s \n","\u001b[?25hRequirement already satisfied: tqdm in /usr/local/lib/python3.6/dist-packages (from sentence_transformers) (4.41.1)\n","Requirement already satisfied: torch>=1.2.0 in /usr/local/lib/python3.6/dist-packages (from sentence_transformers) (1.7.0+cu101)\n","Requirement already satisfied: numpy in /usr/local/lib/python3.6/dist-packages (from sentence_transformers) (1.18.5)\n","Requirement already satisfied: scikit-learn in /usr/local/lib/python3.6/dist-packages (from sentence_transformers) (0.22.2.post1)\n","Requirement already satisfied: scipy in /usr/local/lib/python3.6/dist-packages (from sentence_transformers) (1.4.1)\n","Requirement already satisfied: nltk in /usr/local/lib/python3.6/dist-packages (from sentence_transformers) (3.2.5)\n","Collecting tokenizers==0.8.1.rc2\n","\u001b[?25l  Downloading https://files.pythonhosted.org/packages/80/83/8b9fccb9e48eeb575ee19179e2bdde0ee9a1904f97de5f02d19016b8804f/tokenizers-0.8.1rc2-cp36-cp36m-manylinux1_x86_64.whl (3.0MB)\n","\u001b[K     |████████████████████████████████| 3.0MB 38.8MB/s \n","\u001b[?25hRequirement already satisfied: dataclasses; python_version < \"3.7\" in /usr/local/lib/python3.6/dist-packages (from transformers<3.4.0,>=3.1.0->sentence_transformers) (0.7)\n","Requirement already satisfied: packaging in /usr/local/lib/python3.6/dist-packages (from transformers<3.4.0,>=3.1.0->sentence_transformers) (20.4)\n","Requirement already satisfied: regex!=2019.12.17 in /usr/local/lib/python3.6/dist-packages (from transformers<3.4.0,>=3.1.0->sentence_transformers) (2019.12.20)\n","Requirement already satisfied: filelock in /usr/local/lib/python3.6/dist-packages (from transformers<3.4.0,>=3.1.0->sentence_transformers) (3.0.12)\n","Collecting sentencepiece!=0.1.92\n","\u001b[?25l  Downloading https://files.pythonhosted.org/packages/e5/2d/6d4ca4bef9a67070fa1cac508606328329152b1df10bdf31fb6e4e727894/sentencepiece-0.1.94-cp36-cp36m-manylinux2014_x86_64.whl (1.1MB)\n","\u001b[K     |████████████████████████████████| 1.1MB 23.1MB/s \n","\u001b[?25hCollecting sacremoses\n","\u001b[?25l  Downloading https://files.pythonhosted.org/packages/7d/34/09d19aff26edcc8eb2a01bed8e98f13a1537005d31e95233fd48216eed10/sacremoses-0.0.43.tar.gz (883kB)\n","\u001b[K     |████████████████████████████████| 890kB 37.3MB/s \n","\u001b[?25hRequirement already satisfied: requests in /usr/local/lib/python3.6/dist-packages (from transformers<3.4.0,>=3.1.0->sentence_transformers) (2.23.0)\n","Requirement already satisfied: future in /usr/local/lib/python3.6/dist-packages (from torch>=1.2.0->sentence_transformers) (0.16.0)\n","Requirement already satisfied: typing-extensions in /usr/local/lib/python3.6/dist-packages (from torch>=1.2.0->sentence_transformers) (3.7.4.3)\n","Requirement already satisfied: joblib>=0.11 in /usr/local/lib/python3.6/dist-packages (from scikit-learn->sentence_transformers) (0.17.0)\n","Requirement already satisfied: six in /usr/local/lib/python3.6/dist-packages (from nltk->sentence_transformers) (1.15.0)\n","Requirement already satisfied: pyparsing>=2.0.2 in /usr/local/lib/python3.6/dist-packages (from packaging->transformers<3.4.0,>=3.1.0->sentence_transformers) (2.4.7)\n","Requirement already satisfied: click in /usr/local/lib/python3.6/dist-packages (from sacremoses->transformers<3.4.0,>=3.1.0->sentence_transformers) (7.1.2)\n","Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.6/dist-packages (from requests->transformers<3.4.0,>=3.1.0->sentence_transformers) (2020.6.20)\n","Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.6/dist-packages (from requests->transformers<3.4.0,>=3.1.0->sentence_transformers) (2.10)\n","Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.6/dist-packages (from requests->transformers<3.4.0,>=3.1.0->sentence_transformers) (3.0.4)\n","Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.6/dist-packages (from requests->transformers<3.4.0,>=3.1.0->sentence_transformers) (1.24.3)\n","Building wheels for collected packages: sentence-transformers, sacremoses\n","  Building wheel for sentence-transformers (setup.py) ... \u001b[?25l\u001b[?25hdone\n","  Created wheel for sentence-transformers: filename=sentence_transformers-0.3.8-cp36-none-any.whl size=101996 sha256=82877cbb533acd23575bcdef05eaa97692f5043f95779b7230309ff6b6cdbe5c\n","  Stored in directory: /root/.cache/pip/wheels/27/ec/b3/d12cc8e4daf77846db6543033d3a5642f204c0320b15945647\n","  Building wheel for sacremoses (setup.py) ... \u001b[?25l\u001b[?25hdone\n","  Created wheel for sacremoses: filename=sacremoses-0.0.43-cp36-none-any.whl size=893257 sha256=b80faa09ebe94c6c54005d8edf213e2c423a94848266f87471a0d72a470aebea\n","  Stored in directory: /root/.cache/pip/wheels/29/3c/fd/7ce5c3f0666dab31a50123635e6fb5e19ceb42ce38d4e58f45\n","Successfully built sentence-transformers sacremoses\n","Installing collected packages: tokenizers, sentencepiece, sacremoses, transformers, sentence-transformers\n","Successfully installed sacremoses-0.0.43 sentence-transformers-0.3.8 sentencepiece-0.1.94 tokenizers-0.8.1rc2 transformers-3.3.1\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"u1MTfLvm8nEB","executionInfo":{"status":"ok","timestamp":1605509700908,"user_tz":-480,"elapsed":6567,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}}},"source":["import os\n","import pickle\n","import re\n","import time\n","import datetime\n","import random\n","import pandas as pd\n","import numpy as np\n","import matplotlib.pyplot as plt\n","\n","from sklearn.model_selection import train_test_split\n","from sklearn.decomposition import PCA\n","from collections import Counter\n","\n","import tensorflow as tf\n","from tensorflow import keras\n","from tensorflow.python.ops import math_ops\n","from tensorflow.python.ops import summary_ops_v2\n","\n","from sentence_transformers import SentenceTransformer, models"],"execution_count":2,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"mqSQJvW58nEo"},"source":["## **1. Data Preparing**"]},{"cell_type":"markdown","metadata":{"id":"n8sdu6nE8nEr"},"source":["### 1.1 查看数据\n","本项目使用的是MovieLens 1M 数据集，包含6000个用户在近4000部电影上的1亿条评论。\n","\n","数据集分为三个文件：用户数据users.dat，电影数据movies.dat和评分数据ratings.dat。"]},{"cell_type":"code","metadata":{"id":"rphfmY4qPjgQ","executionInfo":{"status":"ok","timestamp":1605509721040,"user_tz":-480,"elapsed":16446,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}},"outputId":"c48d7e21-c58f-477d-83b8-6792f1cad662","colab":{"base_uri":"https://localhost:8080/"}},"source":["from google.colab import drive\n","drive.mount('/content/drive/')"],"execution_count":3,"outputs":[{"output_type":"stream","text":["Mounted at /content/drive/\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"Pge1Z62APkLX","executionInfo":{"status":"ok","timestamp":1605509721041,"user_tz":-480,"elapsed":2630,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}},"outputId":"c4c0425d-a2ed-4473-d11d-fd405fe18e43","colab":{"base_uri":"https://localhost:8080/"}},"source":["%cd '/content/drive/My Drive/Movie_lens/'"],"execution_count":4,"outputs":[{"output_type":"stream","text":["/content/drive/My Drive/Movie_lens\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"RhP5glF28nEt"},"source":["#### 1.1.1 用户数据\n","分别有用户ID、性别、年龄、职业ID和邮编等字段。\n","\n","数据中的格式：UserID::Gender::Age::Occupation::Zip-code\n","\n","- Gender is denoted by a \"M\" for male and \"F\" for female\n","- Age is chosen from the following ranges:\n","\n","\t*  1:  \"Under 18\"\n","\t* 18:  \"18-24\"\n","\t* 25:  \"25-34\"\n","\t* 35:  \"35-44\"\n","\t* 45:  \"45-49\"\n","\t* 50:  \"50-55\"\n","\t* 56:  \"56+\"\n","\n","- Occupation is chosen from the following choices:\n","\n","\t*  0:  \"other\" or not specified\n","\t*  1:  \"academic/educator\"\n","\t*  2:  \"artist\"\n","\t*  3:  \"clerical/admin\"\n","\t*  4:  \"college/grad student\"\n","\t*  5:  \"customer service\"\n","\t*  6:  \"doctor/health care\"\n","\t*  7:  \"executive/managerial\"\n","\t*  8:  \"farmer\"\n","\t*  9:  \"homemaker\"\n","\t* 10:  \"K-12 student\"\n","\t* 11:  \"lawyer\"\n","\t* 12:  \"programmer\"\n","\t* 13:  \"retired\"\n","\t* 14:  \"sales/marketing\"\n","\t* 15:  \"scientist\"\n","\t* 16:  \"self-employed\"\n","\t* 17:  \"technician/engineer\"\n","\t* 18:  \"tradesman/craftsman\"\n","\t* 19:  \"unemployed\"\n","\t* 20:  \"writer\"\n","\n"]},{"cell_type":"code","metadata":{"id":"qa2jymbs8nEt","executionInfo":{"status":"ok","timestamp":1605509726989,"user_tz":-480,"elapsed":969,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}},"outputId":"ce74fca9-e44c-428a-c05c-0790d0a6d1e8","colab":{"base_uri":"https://localhost:8080/","height":206}},"source":["users_title = ['UserID', 'Gender', 'Age', 'OccupationID', 'Zip-code']\n","users = pd.read_csv('./ml-1m/users.dat', sep='::', header=None, names=users_title, engine = 'python')\n","users.head()"],"execution_count":5,"outputs":[{"output_type":"execute_result","data":{"text/html":["<div>\n","<style scoped>\n","    .dataframe tbody tr th:only-of-type {\n","        vertical-align: middle;\n","    }\n","\n","    .dataframe tbody tr th {\n","        vertical-align: top;\n","    }\n","\n","    .dataframe thead th {\n","        text-align: right;\n","    }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n","  <thead>\n","    <tr style=\"text-align: right;\">\n","      <th></th>\n","      <th>UserID</th>\n","      <th>Gender</th>\n","      <th>Age</th>\n","      <th>OccupationID</th>\n","      <th>Zip-code</th>\n","    </tr>\n","  </thead>\n","  <tbody>\n","    <tr>\n","      <th>0</th>\n","      <td>1</td>\n","      <td>F</td>\n","      <td>1</td>\n","      <td>10</td>\n","      <td>48067</td>\n","    </tr>\n","    <tr>\n","      <th>1</th>\n","      <td>2</td>\n","      <td>M</td>\n","      <td>56</td>\n","      <td>16</td>\n","      <td>70072</td>\n","    </tr>\n","    <tr>\n","      <th>2</th>\n","      <td>3</td>\n","      <td>M</td>\n","      <td>25</td>\n","      <td>15</td>\n","      <td>55117</td>\n","    </tr>\n","    <tr>\n","      <th>3</th>\n","      <td>4</td>\n","      <td>M</td>\n","      <td>45</td>\n","      <td>7</td>\n","      <td>02460</td>\n","    </tr>\n","    <tr>\n","      <th>4</th>\n","      <td>5</td>\n","      <td>M</td>\n","      <td>25</td>\n","      <td>20</td>\n","      <td>55455</td>\n","    </tr>\n","  </tbody>\n","</table>\n","</div>"],"text/plain":["   UserID Gender  Age  OccupationID Zip-code\n","0       1      F    1            10    48067\n","1       2      M   56            16    70072\n","2       3      M   25            15    55117\n","3       4      M   45             7    02460\n","4       5      M   25            20    55455"]},"metadata":{"tags":[]},"execution_count":5}]},{"cell_type":"markdown","metadata":{"id":"6fxSVkf48nE7"},"source":["可以看出UserID、Gender、Age和Occupation都是类别字段，其中邮编字段是我们不使用的。"]},{"cell_type":"markdown","metadata":{"id":"MGH3lKIi8nE7"},"source":["#### 1.1.2 电影数据\n","分别有电影ID、电影名和电影风格等字段。\n","\n","数据中的格式：MovieID::Title::Genres\n","\n","- Titles are identical to titles provided by the IMDB (including\n","year of release)\n","- Genres are pipe-separated and are selected from the following genres:\n","\n","\t* Action\n","\t* Adventure\n","\t* Animation\n","\t* Children's\n","\t* Comedy\n","\t* Crime\n","\t* Documentary\n","\t* Drama\n","\t* Fantasy\n","\t* Film-Noir\n","\t* Horror\n","\t* Musical\n","\t* Mystery\n","\t* Romance\n","\t* Sci-Fi\n","\t* Thriller\n","\t* War\n","\t* Western\n"]},{"cell_type":"code","metadata":{"id":"CIkC6u2j8nE9","executionInfo":{"status":"ok","timestamp":1605509731083,"user_tz":-480,"elapsed":972,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}},"outputId":"e4108b0c-8e72-4e22-ef24-cbe6d366401c","colab":{"base_uri":"https://localhost:8080/","height":206}},"source":["movies_title = ['MovieID', 'Title', 'Genres']\n","movies = pd.read_csv('./ml-1m/movies.dat', sep='::', header=None, names=movies_title, engine = 'python')\n","movies.head()"],"execution_count":6,"outputs":[{"output_type":"execute_result","data":{"text/html":["<div>\n","<style scoped>\n","    .dataframe tbody tr th:only-of-type {\n","        vertical-align: middle;\n","    }\n","\n","    .dataframe tbody tr th {\n","        vertical-align: top;\n","    }\n","\n","    .dataframe thead th {\n","        text-align: right;\n","    }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n","  <thead>\n","    <tr style=\"text-align: right;\">\n","      <th></th>\n","      <th>MovieID</th>\n","      <th>Title</th>\n","      <th>Genres</th>\n","    </tr>\n","  </thead>\n","  <tbody>\n","    <tr>\n","      <th>0</th>\n","      <td>1</td>\n","      <td>Toy Story (1995)</td>\n","      <td>Animation|Children's|Comedy</td>\n","    </tr>\n","    <tr>\n","      <th>1</th>\n","      <td>2</td>\n","      <td>Jumanji (1995)</td>\n","      <td>Adventure|Children's|Fantasy</td>\n","    </tr>\n","    <tr>\n","      <th>2</th>\n","      <td>3</td>\n","      <td>Grumpier Old Men (1995)</td>\n","      <td>Comedy|Romance</td>\n","    </tr>\n","    <tr>\n","      <th>3</th>\n","      <td>4</td>\n","      <td>Waiting to Exhale (1995)</td>\n","      <td>Comedy|Drama</td>\n","    </tr>\n","    <tr>\n","      <th>4</th>\n","      <td>5</td>\n","      <td>Father of the Bride Part II (1995)</td>\n","      <td>Comedy</td>\n","    </tr>\n","  </tbody>\n","</table>\n","</div>"],"text/plain":["   MovieID                               Title                        Genres\n","0        1                    Toy Story (1995)   Animation|Children's|Comedy\n","1        2                      Jumanji (1995)  Adventure|Children's|Fantasy\n","2        3             Grumpier Old Men (1995)                Comedy|Romance\n","3        4            Waiting to Exhale (1995)                  Comedy|Drama\n","4        5  Father of the Bride Part II (1995)                        Comedy"]},"metadata":{"tags":[]},"execution_count":6}]},{"cell_type":"markdown","metadata":{"id":"WA_PDU628nFI"},"source":["MovieID是类别字段，Title是文本，Genres也是类别字段"]},{"cell_type":"markdown","metadata":{"id":"znWeBiEq8nFL"},"source":["#### 1.1.3 评分数据\n","分别有用户ID、电影ID、评分和时间戳等字段。\n","\n","数据中的格式：UserID::MovieID::Rating::Timestamp\n","\n","- UserIDs range between 1 and 6040 \n","- MovieIDs range between 1 and 3952\n","- Ratings are made on a 5-star scale (whole-star ratings only)\n","- Timestamp is represented in seconds since the epoch as returned by time(2)\n","- Each user has at least 20 ratings"]},{"cell_type":"code","metadata":{"id":"3KUyiMKA8nFL","executionInfo":{"status":"ok","timestamp":1605509739828,"user_tz":-480,"elapsed":6497,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}},"outputId":"2248226b-0d14-4de4-a76a-e0befb53e55c","colab":{"base_uri":"https://localhost:8080/","height":206}},"source":["ratings_title = ['UserID','MovieID', 'Rating', 'timestamps']\n","ratings = pd.read_csv('./ml-1m/ratings.dat', sep='::', header=None, names=ratings_title, engine = 'python')\n","ratings.head()"],"execution_count":7,"outputs":[{"output_type":"execute_result","data":{"text/html":["<div>\n","<style scoped>\n","    .dataframe tbody tr th:only-of-type {\n","        vertical-align: middle;\n","    }\n","\n","    .dataframe tbody tr th {\n","        vertical-align: top;\n","    }\n","\n","    .dataframe thead th {\n","        text-align: right;\n","    }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n","  <thead>\n","    <tr style=\"text-align: right;\">\n","      <th></th>\n","      <th>UserID</th>\n","      <th>MovieID</th>\n","      <th>Rating</th>\n","      <th>timestamps</th>\n","    </tr>\n","  </thead>\n","  <tbody>\n","    <tr>\n","      <th>0</th>\n","      <td>1</td>\n","      <td>1193</td>\n","      <td>5</td>\n","      <td>978300760</td>\n","    </tr>\n","    <tr>\n","      <th>1</th>\n","      <td>1</td>\n","      <td>661</td>\n","      <td>3</td>\n","      <td>978302109</td>\n","    </tr>\n","    <tr>\n","      <th>2</th>\n","      <td>1</td>\n","      <td>914</td>\n","      <td>3</td>\n","      <td>978301968</td>\n","    </tr>\n","    <tr>\n","      <th>3</th>\n","      <td>1</td>\n","      <td>3408</td>\n","      <td>4</td>\n","      <td>978300275</td>\n","    </tr>\n","    <tr>\n","      <th>4</th>\n","      <td>1</td>\n","      <td>2355</td>\n","      <td>5</td>\n","      <td>978824291</td>\n","    </tr>\n","  </tbody>\n","</table>\n","</div>"],"text/plain":["   UserID  MovieID  Rating  timestamps\n","0       1     1193       5   978300760\n","1       1      661       3   978302109\n","2       1      914       3   978301968\n","3       1     3408       4   978300275\n","4       1     2355       5   978824291"]},"metadata":{"tags":[]},"execution_count":7}]},{"cell_type":"markdown","metadata":{"id":"2GtONG2S8nFW"},"source":["评分字段Rating就是我们要学习的targets，时间戳字段我们不使用。"]},{"cell_type":"markdown","metadata":{"id":"4bWmdGHf8nFY"},"source":["### 1.2 数据预处理"]},{"cell_type":"markdown","metadata":{"id":"I8AgRCWN8nFb"},"source":["- UserID、Occupation和MovieID不用变。\n","- Gender字段：需要将‘F’和‘M’转换成0和1。\n","- Age字段：要转成7个连续数字0~6。\n","- Genres字段：是分类字段，使用One-hot embedding转成数字。\n","- Title字段：使用Sentence BERT转成句向量。"]},{"cell_type":"markdown","metadata":{"id":"mP5tJTg7V-1m"},"source":["#### 1.2.1 User dataset预处理"]},{"cell_type":"code","metadata":{"id":"LSy4sBHqV92R","executionInfo":{"status":"ok","timestamp":1605509743932,"user_tz":-480,"elapsed":1136,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}}},"source":["#读取User数据\n","users_title = ['UserID', 'Gender', 'Age', 'JobID', 'Zip-code']\n","users = pd.read_csv('./ml-1m/users.dat', sep='::', header=None, names=users_title, engine = 'python')\n","users = users.filter(regex='UserID|Gender|Age|JobID')\n","users_orig = users.values\n","#改变User数据中性别和年龄\n","gender_map = {'F':0, 'M':1}\n","users['Gender'] = users['Gender'].map(gender_map)\n","\n","age_map = {val:ii for ii,val in enumerate(set(users['Age']))}\n","users['Age'] = users['Age'].map(age_map)"],"execution_count":8,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"sGlHAspqW_FH"},"source":["#### 1.2.2 Movie dataset预处理"]},{"cell_type":"code","metadata":{"id":"wg6Uuhu9XExJ","executionInfo":{"status":"ok","timestamp":1605509747299,"user_tz":-480,"elapsed":876,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}}},"source":["#读取Movie数据\n","movies_title = ['MovieID', 'Title', 'Genres']\n","movies = pd.read_csv('./ml-1m/movies.dat', sep='::', header=None, names=movies_title, engine = 'python')\n","movies_orig = movies.values"],"execution_count":9,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"rThVfeq9Rjzd"},"source":["##### 1.2.2.1 Movie dataset 中Title字段处理"]},{"cell_type":"code","metadata":{"id":"5CAssjkObOam","executionInfo":{"status":"ok","timestamp":1605509749434,"user_tz":-480,"elapsed":935,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}}},"source":["#将Title中的年份去掉\n","pattern = re.compile(r'^(.*)\\((\\d+)\\)$')\n","title_map = {val:pattern.match(val).group(1) for ii,val in enumerate(set(movies['Title']))}\n","movies['Title'] = movies['Title'].map(title_map)"],"execution_count":10,"outputs":[]},{"cell_type":"code","metadata":{"id":"DOiDJHUjY7z-","executionInfo":{"status":"ok","timestamp":1605509910317,"user_tz":-480,"elapsed":159605,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}},"outputId":"549b3713-596f-4aa2-abe6-83e04ae2521b","colab":{"base_uri":"https://localhost:8080/","height":168,"referenced_widgets":["80acd9370fbe4993b0f228c448904923","0d0e5981669b413e80712704aac40df6","070795ba80b34e2e8bfcc7cc84fdc6f1","9f30ae648ad247ed89bf88c2fd5b1a1d","67996e5c2f5e452882ba3b4f716b7ce0","0fad55bfb5054db9beda3e9706740290","75b37f74df754bbbad269dbe0e77dcc5","408810d8df5b4c47aebf8bcd54a6a6e5","8b81bd05377b423b92d210ee6026d215","afe11a55aec842fa8691a8a13771a06f","55f2949c3bbc45d380f96120fde9cb0c","c340f86e52204715a4169a2a6c02c9a4","b1d905aa87514c4195b4f55d5bd2e4d0","37c0d6c06d5b4335995f6f72b93552d7","98ef0c080aad443ea696c4aea9ff02c6","b323f97c4ae84d79804664d498bec7ff","fd9cf9cb927446cab1c7d98154bac52e","f613a44183e14483b61dce20310541af","427e49fdfc9a4ac7bddcefe75229c580","1d22891a64d54aa8b513b2b0f7c7b1de","4e0c8de536974c26afe729920729e108","094f0232621b47408ddf6cf42b20d2c6","316aa3b6500447a59d8e83449302db4e","bca663fa5bb44cb5bab7337a9edff9ba"]}},"source":["word_embedding_model = models.Transformer('bert-base-uncased', max_seq_length = 16) # 定义embedding模型\n","pooling_model = models.Pooling(word_embedding_model.get_word_embedding_dimension()) # 定义pooling层\n","model = SentenceTransformer(modules=[word_embedding_model, pooling_model]) # 总模型\n","\n","title_encoded=model.encode(movies.Title[:]) # 对Title进行embedding"],"execution_count":11,"outputs":[{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"80acd9370fbe4993b0f228c448904923","version_minor":0,"version_major":2},"text/plain":["HBox(children=(FloatProgress(value=0.0, description='Downloading', max=433.0, style=ProgressStyle(description_…"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["\n"],"name":"stdout"},{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"8b81bd05377b423b92d210ee6026d215","version_minor":0,"version_major":2},"text/plain":["HBox(children=(FloatProgress(value=0.0, description='Downloading', max=440473133.0, style=ProgressStyle(descri…"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["\n"],"name":"stdout"},{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"fd9cf9cb927446cab1c7d98154bac52e","version_minor":0,"version_major":2},"text/plain":["HBox(children=(FloatProgress(value=0.0, description='Downloading', max=231508.0, style=ProgressStyle(descripti…"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"poQDSHdqSJaH","executionInfo":{"status":"ok","timestamp":1605509915524,"user_tz":-480,"elapsed":753,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}},"outputId":"a0a2db99-c72e-4519-efb0-8fa7d1befa38","colab":{"base_uri":"https://localhost:8080/"}},"source":["\"\"\"\n","Sentence BERT模型的原理是：\n","将一个句子经过BERT网络，得到每个token的embedding(768维)，对token embedding使用mean_over_time pooling得到整个句子的embedding(768维)\n","\"\"\"\n","title_encoded[0].shape"],"execution_count":12,"outputs":[{"output_type":"execute_result","data":{"text/plain":["(768,)"]},"metadata":{"tags":[]},"execution_count":12}]},{"cell_type":"code","metadata":{"id":"TQjlDQ2eWW14","executionInfo":{"status":"ok","timestamp":1605509917860,"user_tz":-480,"elapsed":715,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}},"outputId":"6d4f31a7-e2c0-4877-c964-887e6f4bd02f","colab":{"base_uri":"https://localhost:8080/"}},"source":["#使用PCA将每个句子的embedding降到2维，可视化Sentence BERT embedding的效果\n","pca = PCA(n_components=2)\n","pca.fit(title_encoded)\n","print(pca.explained_variance_ratio_)"],"execution_count":13,"outputs":[{"output_type":"stream","text":["[0.11573161 0.05511457]\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"fam5iBueeKVZ","executionInfo":{"status":"ok","timestamp":1605509921173,"user_tz":-480,"elapsed":1821,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}},"outputId":"2bd68053-adb8-445e-9cd5-5ced1988fe9d","colab":{"base_uri":"https://localhost:8080/","height":592}},"source":["#可视化50个Title embedding的效果\n","plot_only = 50\n","low_dim_embs = pca.fit_transform(title_encoded[:plot_only])\n","labels = [movies.Title[i] for i in range(plot_only)]\n","\n","plt.figure(figsize=(10, 10))\n","for i, label in enumerate(labels):\n","  x, y = low_dim_embs[i, :]\n","  plt.scatter(x, y)\n","  plt.annotate(label,xy=(x, y),xytext=(5, 2),textcoords='offset points',ha='right',va='bottom')"],"execution_count":14,"outputs":[{"output_type":"display_data","data":{"image/png":"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U6ZMoUqVKvz000907NiRt99+mwoV8v8+e/XVV7Hb7SxevNjRxocffsiMGTPw8PDAZrMRHR3NF198wYQJE7jxxhuJiIhg69atrFu3jr1793LfffdRoUIF5s6dS1hYmLu+GhGRy3Kxda4UrkTkktatW8fMmTNZuXJlsft79OjBhAkTiIyMLOOeiYiz7NoQz4bFC0k/fowqN/kRNnAIzcI6urtbVy0tIioiLnHq1CmaNm2Kr6/vlQerpM9gVgBEVc//z6TPnNtJEbmkXRvi+fr9t0g/dhRMk/RjR/n6/bfYteHSL+OWojRyJSLuk/QZrBgH2Zn/K/PyhZ5zwHq/+/olcp15f/Tw/GD1J1X8ajJy3gI39Ojqp5ErEbk6xU0rHKwgfztumnv6I3KdSj9+rFTlcnEKVyLiPmkHSlcuIi5R5Sa/UpXLxSlciYj7VKtfunIRcYmwgUPwvMG7UJnnDd6EDRziph5d2xSuRMR9Iqfkz7G6kJdvfrmIlJlmYR3pPHIMVfxqgmFQxa8mnUeO0dOCV0ivvxER9ymYtB43Lf9WYLX6+cFKk9lFylyzsI4KU06icCUi7mW9X2FKRMoV3RYUERERcSKFKxEREREnUrgSERERcSKFKxEREREnUrgSERERcSKFKxEREREnUrgSERERcSKFKxEREREnUrgSERERcSKFKxEREREnUrgSERERcSKFKxEREREnUrgSERERcSKFKxEREREnUrgSERERcSKFKxEREREnUrgSERERcSKFKxEREREnUrgSERERcSKFKxEREREncmm4MgzDwzCMHwzDWOnKdkRERESuFq4euXoS2OXiNkRERESuGi4LV4Zh1Ae6A/Nd1YaIiIjI1caVI1ezgWeAPBe2ISIiInJVcUm4MgyjB/C7aZqJlzhupGEYCYZhJBw9etQVXREREREpU64auWoL9DIMIxVYDEQYhvHxnw8yTfN90zRDTNMMqVmzpou6IiIiIlJ2XBKuTNOcbJpmfdM0GwEDgbWmaT7kirZEREREriZa50pERETEiTxd3YBpmuuAda5uR0RERORqoJErERERESdSuBIRERFxIoUrERERESdSuBIRERFxIoUrERERESdSuBIRERFxIoUrERERESdSuBIRERFxIoUrERERESdSuBIRERFxIoUrERERESdSuBIRERFxIoUrERERESdSuBIRERFxIoUrERERESdSuBIRERFxIoUrERERESdSuBIRERFxIoUrERERESdSuBIRERFxIoUrERERESdSuBIREbkKeXh4EBQUREBAAP379+fs2bNOq7tRo0YcO3bsL9dz6tQp3n77bSf0qHxRuBIREbkK+fr6YrfbSU5O5oYbbuDdd991d5eKULgqnsKViIjIVS4sLIyffvqJEydO0Lt3b6xWK3feeSdJSUkAZGRkMHz4cCwWC1arlSVLlgDw+OOPExISQosWLZg6dWqhOufOnUvLli2xWCzs3r0boMT6o6KiGDFiBOHh4TRp0oQ5c+YAMGnSJPbt20dQUBATJ04kIyODyMhIR71ffPEFAGfOnKF79+4EBgYSEBBATExMmXxv7uLp7g6IiIhIyXJycvjyyy/p2rUrU6dOxWazsXz5ctauXcuQIUOw2+387W9/o1q1auzYsQOAkydPAvDyyy9To0YNcnNziYyMJCkpCavVCoCfnx/btm3j7bffZubMmcyfP7/E+gF2795NfHw86enp+Pv78/jjj/Pqq6+SnJzsOCYnJ4dly5ZRtWpVjh07xp133kmvXr34z3/+Q926dVm1ahUAaWlpZf01limNXImIiFyFMjMzCQoKIiQkhAYNGvDwww+zceNGBg8eDEBERATHjx/n9OnTrFmzhtGjRzvOvfHGGwH47LPPaNmyJTabjZ07d5KSkuI4pm/fvgAEBweTmpoKUGL9AN27d8fb2xs/Pz9q1arFkSNHivTZNE2ee+45rFYrd999NwcPHuTIkSNYLBa++eYbnn32WTZs2EC1atWc/4VdRTRyJSIichUqmHN1pf773/8yc+ZMtm7dyo033siwYcPIyspy7Pf29gbyJ87n5ORcsr6C4y92zqJFizh69CiJiYl4eXnRqFEjsrKyaNq0Kdu2bWP16tW88MILREZGMmXKlCu+tqudRq5ERESuEWFhYSxatAiAdevW4efnR9WqVenUqRPz5s1zHHfy5ElOnz5NpUqVqFatGkeOHOHLL7+84vpLUqVKFdLT0x3baWlp1KpVCy8vL+Lj49m/fz8Ahw4domLFijz00ENMnDiRbdu2XdH1Xys0ciUiInKNKJhYbrVaqVixIh9++CEAL7zwAqNHjyYgIAAPDw+mTp1K3759sdls3HHHHdxyyy20bdv2iusvyU033UTbtm0JCAjgnnvu4dlnn6Vnz55YLBZCQkK44447ANixYwcTJ06kQoUKeHl58c477/z1L+MqZpim6e4+ABASEmImJCS4uxsiIiIil2QYRqJpmiHF7dPIlYiIiJSJpKQk4uLiSEtLo1q1akRGRjqeXixPFK5ERETE5ZKSklixYgXZ2dlA/vysFStWAJS7gKUJ7SIiIuJycXFxjmBVIDs7m7i4ODf1yHUUrkRERMTlSlo4tDwuKKpwJSIiIi5X0sKh5XFBUYUrERERcbnIyEi8vLwKlXl5eREZGemmHrmOwpWIlBkPDw+CgoIICAigZ8+enDp1CshfYPC+++676LmNGjXi2LFjTutLeHg4xS3/cmH5hW1WrlzZaW2LXI+sVis9e/Z0jFRVq1aNnj17lrvJ7KCnBUWkDF34Oo+hQ4cyb948nn/+eerWrUtsbKzL2s3JycHTUz93Iu5mtVrLZZj6M41ciYhbtGnThoMHDwKQmppKQEAAALm5uTz99NMEBARgtVqZO3eu45y5c+fSsmVLLBYLu3fvBmDLli20adMGm83GXXfdxZ49ewCIjo6mV69eREREEBkZSWZmJgMHDqRZs2b06dOHzMzMMr5iEble6E85ESlzubm5xMXF8fDDDxfZ9/7775OamordbsfT05MTJ0449vn5+bFt2zbefvttZs6cyfz587njjjvYsGEDnp6erFmzhueee44lS5YAsG3bNpKSkqhRowZvvvkmFStWZNeuXSQlJdGyZcsyu14Rub4oXIlImcnMzCQoKIiDBw/SrFkzOnXqVOSYNWvWMGrUKMdtvBo1ajj29e3bF4Dg4GCWLl0K5D/GPXToUH788UcMwyi0jk6nTp0c569fv55x48YB18+tCRFxD90WFJEyUzDnav/+/Zimybx580p1vre3N5A/MT4nJweAF198kY4dO5KcnMyKFSvIyspyHF+pUiXndV5E5DIpXIlImatYsSJz5szhjTfecISkAp06deK9995zlF94W7A4aWlp1KtXD8ifZ1WS9u3b88knnwCQnJxMUlLSX7gCEZGSKVyJiFvYbDasViuffvppofJHHnmEBg0aYLVaCQwMdASikjzzzDNMnjwZm81WJKhd6PHHHycjI4NmzZoxZcoUgoODnXIdIiJ/Zpim6e4+ABASEmIWt+aMiIiIyNXGMIxE0zRDitunCe0iIhex/IeDzPhqD4dOZVK3ui8Tu/jT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2rWrY+7VyJEjsVqttGzZkpdffvmy2vbx8WHBggX079+fnJwcQkNDGTVqFN7e3jz66KMEBARQu3ZtQkNDHecMGzaMUaNG4evry/fff1/svKv09HTuvfdesrKyME2TN998s8gxf/vb32jdujU1a9akdevWlwxsffr0Ye3atTRv3pwGDRrQpk2by7rG8sa4WobyQkJCzISEBHd3Q0REROSSDMNINE0zpLh9GrkSERERp9r7f7/x/Rf7yDhxjso1vGlz7600bV3b3d0qMwpXIiIi4jR7/+834hftJud8/iT/jBPniF+0G+C6CVia0C4iIiJO8/0X+xzBqkDO+Ty+/2Kfm3pU9hSuRERExGkyTpwrVXl5pHAlIiIiTlO5hnepyssjhSsRERFxmjb33ornDYXjhecNFWhz761u6lHZ04R2ERERcZqCSet6WlBERETESZq2rn1dhak/021BERERESdSuBIRERFxIoUrERERESdSuBIRERFxIoUrERERESdSuBIRERFxIoUrERERESdSuBIRERFxIoUrERERESdSuBIRERFxIoUrERERESdSuBIRERFxIoUrERERESdSuBIRERFxIoUrERERESdSuBIRERFxIoUrERERESdSuBIRERFxIoWrMnDkyBEeeOABmjRpQnBwMG3atGHZsmWFjjEMg6eeesqx/fjjj9O0aVMA3n33XRYuXOjY16hRI44dO3ZFfYmKiqJevXoEBQU5/p06deqK6hIREZGiFK5czDRNevfuTfv27fn5559JTExk8eLFHDhwoNBx3t7eLF26tNjQNGrUKIYMGeK0Pk2YMAG73e74V716dafVLSIicr1TuHKxtWvXcsMNNzBq1ChHWcOGDRk7diwAWVlZDB8+nOzsbM6dO8f48eOL1PHMM8/QtGlTmjdvTs2aNcnMzARg8uTJ3HvvvbRq1Yp69epRo0YNAgICmD17NpUrV2b06NH4+PhQq1Yt/P396dy5M9nZ2cX2s3379tjtdsd2u3bt2L59O2fOnGHEiBG0atUKm83GF1984cyvR0REpNxRuHKxnTt30rJlyxL3z5s3D8Mw8PX15d///jeLFy/myJEjhY759ttvady4MSkpKbz00kv8/vvvfPvttyxfvpycnBzmzp1LjRo16NevH+PGjeOf//wnZ86cwWazkZOTwz333MPgwYOpXr06u3btYtas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nz17lri4ODp06IBGo2HmzJn89ddfAKhUKvz9/fnll18wMysepx86dEha6j9w4EC949m1axcuLi64uroSHx8vTSs2aNBAchUv6mZeFGtraywsLBg2bBibNm2SbrT3Y2pqqvdkrGsrNTVVKqtRowa1a9eW3t+7d6+kS1EMExMTbG1tcXZ2plu3bsSfXcWhQ97s3fcahw55k3Rj64MbofCHRaFQsGfPHqlsy5YtKBSKUllLGKJofsNnTYsejTAro397MStjQosejZ5Lf2T+RacNNDEx0dMJmpiYFJMBhIeHs2fPHiIjI4mJicHFxUXSHJqbm0v3i/s1hrryR6WoVrOgoKBU38uWLVsSFhZmVBMpI/MskYOrFxRDYmutVotWq+XSpUt07NhRzyFbq9VSvXr1h76x6DRXERERemlKdL5JQgicnJykfcfGxrJr1y4AduzYwXvvvUd0dDTNmzc3qM8ydJMVQjBlyhSpzQsXLjBs2DCgdKJwMzMzjh07Rp8+fdi+fbvR3HW6J2Pdy87ODvhXAKzVahk5cqR0DrRabYkrqwz1xdzcnP79+xMXF0e5clkEB39Ids51QJCdc534+KmlDrCUSqWeSeeaNWtQq9Wlqvui4eBRg7b+TaSRKkubsrT1byKL2Z8BpqamJCYmcuHCBaBwMUibNm0eqa309HQqV65M+fLliY+P58iRIw+s4+XlJf0fr1q16pH2W1Sr+euvv0payA4dOnuDLiIAACAASURBVPDzzz9z584dAG7duiXVGTZsGJ07d6Zv375PJAuCjMzjIAdXLyCPK7Y2Jgp/FBo3bkxycrI0NZabm8vp06cpKCjg6tWrtG3bli+//JL09PRi03HGbrJ+fn789NNP0vbXrl3j77//LrEfRQXkmZmZpKen07lzZ+bNm/dQwnatVounpycqlYpevXpx9+5dCgoKpJV7MTExKBQKyVKhWrVqdO7cmVatWlGzZk2aN29O8+bNOXTokF676enp/P57BH//fReA06fv0snvIkOHnKN7t8H4+vri5uaGq6srarVa2r9OyD979mwUCgWrV6+mSZMm7N+/n127dnHx4kXWrFkDwPbt27G2tqZcuXJUrlyZX375BSj8IZo+fbqkvdOZqxbl+++/5/XXX+fu3bv88ssvksnnu+++S35+Pj/99JM0baTbfty4cWRlZdGlSxfUajXOzs6E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\n","text/plain":["<Figure size 720x720 with 1 Axes>"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"hUTHS-XiWjgn"},"source":["##### 1.2.2.2 Movie dataset 中其他字段处理"]},{"cell_type":"code","metadata":{"id":"bGV2Yyf4WmFq"},"source":["#电影类型one-hot编码\n","movies.Genres=movies.Genres.apply(lambda x: x.split('|'))\n","genres=[\n","    'Action',\n","    'Adventure',\n","    'Animation',\n","    \"Children's\",\n","    'Comedy',\n","    'Crime',\n","    'Documentary',\n","    'Drama',\n","    'Fantasy',\n","    'Film-Noir',\n","    'Horror',\n","    'Musical',\n","    'Mystery',\n","    'Romance',\n","    'Sci-Fi',\n","    'Thriller',\n","    'War',\n","    'Western'\n","    ]\n","for i in genres:\n","  movies[i] = movies.Genres.apply(lambda x: i in x).astype(int)\n","\n","classes = movies.iloc[:,3:].values\n","movies['Action']=movies['Action'].astype(object)\n","for i in range(len(movies)):\n","  movies['Action'][i]=classes[i]\n","    \n","movies.drop(columns=['Genres','Adventure',\n","    'Animation',\n","    \"Children's\",\n","    'Comedy',\n","    'Crime',\n","    'Documentary',\n","    'Drama',\n","    'Fantasy',\n","    'Film-Noir',\n","    'Horror',\n","    'Musical',\n","    'Mystery',\n","    'Romance',\n","    'Sci-Fi',\n","    'Thriller',\n","    'War',\n","    'Western'],inplace=True)\n","\n","movies = movies.rename(columns={'Action':'category'})"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"xTrHFyR1WzWr","executionInfo":{"status":"ok","timestamp":1605509943719,"user_tz":-480,"elapsed":1044,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}},"outputId":"20a97f8d-815c-4d91-f675-1b366ce8b972","colab":{"base_uri":"https://localhost:8080/"}},"source":["#把Title换成embedding\n","for i in range(len(movies)):\n","  movies['Title'][i] = title_encoded[i]"],"execution_count":16,"outputs":[{"output_type":"stream","text":["/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:3: SettingWithCopyWarning: \n","A value is trying to be set on a copy of a slice from a DataFrame\n","\n","See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n","  This is separate from the ipykernel package so we can avoid doing imports until\n"],"name":"stderr"}]},{"cell_type":"markdown","metadata":{"id":"SQD77iLUVojm"},"source":["#### 1.2.3 Dataset合并"]},{"cell_type":"code","metadata":{"id":"O3SI8BXqd0z0","executionInfo":{"status":"ok","timestamp":1605510042864,"user_tz":-480,"elapsed":5785,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}}},"source":["#读取评分数据集\n","ratings_title = ['UserID','MovieID', 'ratings', 'timestamps']\n","ratings = pd.read_csv('./ml-1m/ratings.dat', sep='::', header=None, names=ratings_title, engine = 'python')\n","ratings = ratings.filter(regex='UserID|MovieID|ratings')\n","\n","#合并三个表\n","data = pd.merge(pd.merge(ratings, users), movies)\n","    \n","#将数据分成feature dataframe和target dataframe\n","target_fields = ['ratings']\n","features_pd, targets_pd = data.drop(target_fields, axis=1), data[target_fields]\n","\n","#转化成numpy数组\n","features = features_pd.values\n","targets_values = targets_pd.values"],"execution_count":22,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"w8ZCRBhq8nFx"},"source":["#### 1.2.4 预处理后的数据一览"]},{"cell_type":"code","metadata":{"id":"VmcyIUWq8nF0","executionInfo":{"status":"ok","timestamp":1605510045753,"user_tz":-480,"elapsed":657,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}},"outputId":"1387b2ea-0d7b-43dc-ddb6-5d239373754a","colab":{"base_uri":"https://localhost:8080/","height":206}},"source":["users.head()"],"execution_count":23,"outputs":[{"output_type":"execute_result","data":{"text/html":["<div>\n","<style scoped>\n","    .dataframe tbody tr th:only-of-type {\n","        vertical-align: middle;\n","    }\n","\n","    .dataframe tbody tr th {\n","        vertical-align: top;\n","    }\n","\n","    .dataframe thead th {\n","        text-align: right;\n","    }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n","  <thead>\n","    <tr style=\"text-align: right;\">\n","      <th></th>\n","      <th>UserID</th>\n","      <th>Gender</th>\n","      <th>Age</th>\n","      <th>JobID</th>\n","    </tr>\n","  </thead>\n","  <tbody>\n","    <tr>\n","      <th>0</th>\n","      <td>1</td>\n","      <td>0</td>\n","      <td>0</td>\n","      <td>10</td>\n","    </tr>\n","    <tr>\n","      <th>1</th>\n","      <td>2</td>\n","      <td>1</td>\n","      <td>5</td>\n","      <td>16</td>\n","    </tr>\n","    <tr>\n","      <th>2</th>\n","      <td>3</td>\n","      <td>1</td>\n","      <td>6</td>\n","      <td>15</td>\n","    </tr>\n","    <tr>\n","      <th>3</th>\n","      <td>4</td>\n","      <td>1</td>\n","      <td>2</td>\n","      <td>7</td>\n","    </tr>\n","    <tr>\n","      <th>4</th>\n","      <td>5</td>\n","      <td>1</td>\n","      <td>6</td>\n","      <td>20</td>\n","    </tr>\n","  </tbody>\n","</table>\n","</div>"],"text/plain":["   UserID  Gender  Age  JobID\n","0       1       0    0     10\n","1       2       1    5     16\n","2       3       1    6     15\n","3       4       1    2      7\n","4       5       1    6     20"]},"metadata":{"tags":[]},"execution_count":23}]},{"cell_type":"code","metadata":{"id":"b-teBva59DXA","executionInfo":{"status":"ok","timestamp":1605510046945,"user_tz":-480,"elapsed":515,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}},"outputId":"dec0a0b3-3a28-4055-a64f-1556396d0373","colab":{"base_uri":"https://localhost:8080/","height":206}},"source":["movies.head()"],"execution_count":24,"outputs":[{"output_type":"execute_result","data":{"text/html":["<div>\n","<style scoped>\n","    .dataframe tbody tr th:only-of-type {\n","        vertical-align: middle;\n","    }\n","\n","    .dataframe tbody tr th {\n","        vertical-align: top;\n","    }\n","\n","    .dataframe thead th {\n","        text-align: right;\n","    }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n","  <thead>\n","    <tr style=\"text-align: right;\">\n","      <th></th>\n","      <th>MovieID</th>\n","      <th>Title</th>\n","      <th>category</th>\n","    </tr>\n","  </thead>\n","  <tbody>\n","    <tr>\n","      <th>0</th>\n","      <td>1</td>\n","      <td>[0.13749585, -0.10785753, -0.25206077, -0.1367...</td>\n","      <td>[0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n","    </tr>\n","    <tr>\n","      <th>1</th>\n","      <td>2</td>\n","      <td>[-0.097109795, -0.5188881, -0.30558717, -0.261...</td>\n","      <td>[0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, ...</td>\n","    </tr>\n","    <tr>\n","      <th>2</th>\n","      <td>3</td>\n","      <td>[-0.11809706, 0.104980096, 0.08601798, 0.02849...</td>\n","      <td>[0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, ...</td>\n","    </tr>\n","    <tr>\n","      <th>3</th>\n","      <td>4</td>\n","      <td>[0.35723495, -0.14458236, 0.15157312, -0.09572...</td>\n","      <td>[0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, ...</td>\n","    </tr>\n","    <tr>\n","      <th>4</th>\n","      <td>5</td>\n","      <td>[-0.546299, -0.3512171, 0.4043779, -0.2741943,...</td>\n","      <td>[0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...</td>\n","    </tr>\n","  </tbody>\n","</table>\n","</div>"],"text/plain":["   MovieID  ...                                           category\n","0        1  ...  [0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...\n","1        2  ...  [0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, ...\n","2        3  ...  [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, ...\n","3        4  ...  [0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, ...\n","4        5  ...  [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...\n","\n","[5 rows x 3 columns]"]},"metadata":{"tags":[]},"execution_count":24}]},{"cell_type":"code","metadata":{"id":"Mlqge92y8nF5","executionInfo":{"status":"ok","timestamp":1605510048649,"user_tz":-480,"elapsed":681,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}},"outputId":"b8b19692-1a1e-4d16-9ed9-a33482170965","colab":{"base_uri":"https://localhost:8080/","height":206}},"source":["data.head()"],"execution_count":25,"outputs":[{"output_type":"execute_result","data":{"text/html":["<div>\n","<style scoped>\n","    .dataframe tbody tr th:only-of-type {\n","        vertical-align: middle;\n","    }\n","\n","    .dataframe tbody tr th {\n","        vertical-align: top;\n","    }\n","\n","    .dataframe thead th {\n","        text-align: right;\n","    }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n","  <thead>\n","    <tr style=\"text-align: right;\">\n","      <th></th>\n","      <th>UserID</th>\n","      <th>MovieID</th>\n","      <th>ratings</th>\n","      <th>Gender</th>\n","      <th>Age</th>\n","      <th>JobID</th>\n","      <th>Title</th>\n","      <th>category</th>\n","    </tr>\n","  </thead>\n","  <tbody>\n","    <tr>\n","      <th>0</th>\n","      <td>1</td>\n","      <td>1193</td>\n","      <td>5</td>\n","      <td>0</td>\n","      <td>0</td>\n","      <td>10</td>\n","      <td>[0.33654428, 0.096753076, -0.31076264, -0.1392...</td>\n","      <td>[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, ...</td>\n","    </tr>\n","    <tr>\n","      <th>1</th>\n","      <td>2</td>\n","      <td>1193</td>\n","      <td>5</td>\n","      <td>1</td>\n","      <td>5</td>\n","      <td>16</td>\n","      <td>[0.33654428, 0.096753076, -0.31076264, -0.1392...</td>\n","      <td>[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, ...</td>\n","    </tr>\n","    <tr>\n","      <th>2</th>\n","      <td>12</td>\n","      <td>1193</td>\n","      <td>4</td>\n","      <td>1</td>\n","      <td>6</td>\n","      <td>12</td>\n","      <td>[0.33654428, 0.096753076, -0.31076264, -0.1392...</td>\n","      <td>[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, ...</td>\n","    </tr>\n","    <tr>\n","      <th>3</th>\n","      <td>15</td>\n","      <td>1193</td>\n","      <td>4</td>\n","      <td>1</td>\n","      <td>6</td>\n","      <td>7</td>\n","      <td>[0.33654428, 0.096753076, -0.31076264, -0.1392...</td>\n","      <td>[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, ...</td>\n","    </tr>\n","    <tr>\n","      <th>4</th>\n","      <td>17</td>\n","      <td>1193</td>\n","      <td>5</td>\n","      <td>1</td>\n","      <td>3</td>\n","      <td>1</td>\n","      <td>[0.33654428, 0.096753076, -0.31076264, -0.1392...</td>\n","      <td>[0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, ...</td>\n","    </tr>\n","  </tbody>\n","</table>\n","</div>"],"text/plain":["   UserID  ...                                           category\n","0       1  ...  [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, ...\n","1       2  ...  [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, ...\n","2      12  ...  [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, ...\n","3      15  ...  [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, ...\n","4      17  ...  [0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, ...\n","\n","[5 rows x 8 columns]"]},"metadata":{"tags":[]},"execution_count":25}]},{"cell_type":"markdown","metadata":{"id":"_zMAKaKA8nGU"},"source":["## **2. Model Design**"]},{"cell_type":"markdown","metadata":{"id":"egghvMDc8nGg"},"source":["### 2.1 预定义"]},{"cell_type":"markdown","metadata":{"id":"OTuBXqPxrE8U"},"source":["#### 2.1.1 预定义变量"]},{"cell_type":"code","metadata":{"id":"_C0gSlO78nGg","executionInfo":{"status":"ok","timestamp":1605510062788,"user_tz":-480,"elapsed":975,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}}},"source":["#嵌入矩阵的维度\n","embed_dim = 32\n","#用户ID个数\n","uid_max = max(features.take(0,1)) + 1  #共计6040\n","#性别个数\n","gender_max = max(features.take(2,1)) + 1  #共计2\n","#年龄类别个数\n","age_max = max(features.take(3,1)) + 1  #共计7\n","#职业个数\n","job_max = max(features.take(4,1)) + 1   #共计21\n","#电影ID个数\n","movie_id_max = max(features.take(1,1)) + 1  #共计3952\n","#电影Title embedding长度\n","sentences_size = title_count  = 768"],"execution_count":26,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"UfA1ZLGm8nGm"},"source":["#### 2.1.2 预定义超参"]},{"cell_type":"code","metadata":{"id":"JolsyUpT8nGn","executionInfo":{"status":"ok","timestamp":1605510065214,"user_tz":-480,"elapsed":660,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}}},"source":["#Number of Epochs\n","num_epochs = 10\n","\n","#Batch Size\n","batch_size = 256\n","\n","#dropout\n","dropout_keep = 0.5\n","\n","#Learning Rate\n","learning_rate = 0.0005\n","\n","#Show stats for every n number of batches\n","show_every_n_batches = 20\n","\n","#save path\n","save_dir = './save'"],"execution_count":27,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"QamhmNyc8nGr"},"source":["#### 2.1.3 预定义占位符"]},{"cell_type":"code","metadata":{"id":"-g4kYV0A8nGu","executionInfo":{"status":"ok","timestamp":1605510067418,"user_tz":-480,"elapsed":669,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}}},"source":["def get_inputs():\n","    uid = tf.keras.layers.Input(shape=(1,), dtype='int32', name='uid')  \n","    user_gender = tf.keras.layers.Input(shape=(1,), dtype='int32', name='user_gender')  \n","    user_age = tf.keras.layers.Input(shape=(1,), dtype='int32', name='user_age') \n","    user_job = tf.keras.layers.Input(shape=(1,), dtype='int32', name='user_job')\n","\n","    movie_id = tf.keras.layers.Input(shape=(1,), dtype='int32', name='movie_id') \n","    movie_categories = tf.keras.layers.Input(shape=(18,), dtype='int32', name='movie_categories') \n","    movie_titles = tf.keras.layers.Input(shape=(768,), dtype='int32', name='movie_titles') \n","    return uid, user_gender, user_age, user_job, movie_id, movie_categories, movie_titles"],"execution_count":28,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"BZFUPF8x8nGz"},"source":["### 2.2 构建神经网络"]},{"cell_type":"markdown","metadata":{"id":"m7t8uLC98nG1"},"source":["#### 2.2.1 定义User ID, age, job的嵌入矩阵"]},{"cell_type":"code","metadata":{"id":"1J1_0cXt8nG1","executionInfo":{"status":"ok","timestamp":1605510069472,"user_tz":-480,"elapsed":700,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}}},"source":["def get_user_embedding(uid, user_gender, user_age, user_job):\n","    uid_embed_layer = tf.keras.layers.Embedding(uid_max, embed_dim, input_length=1, name='uid_embed_layer')(uid)\n","    gender_embed_layer = tf.keras.layers.Embedding(gender_max, embed_dim // 2, input_length=1, name='gender_embed_layer')(user_gender)\n","    age_embed_layer = tf.keras.layers.Embedding(age_max, embed_dim // 2, input_length=1, name='age_embed_layer')(user_age)\n","    job_embed_layer = tf.keras.layers.Embedding(job_max, embed_dim // 2, input_length=1, name='job_embed_layer')(user_job)\n","    return uid_embed_layer, gender_embed_layer, age_embed_layer, job_embed_layer"],"execution_count":29,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"rUsn5hBB8nG7"},"source":["#### 2.2.2将User的嵌入矩阵一起全连接生成User的特征"]},{"cell_type":"code","metadata":{"id":"GRChqrcm8nG8","executionInfo":{"status":"ok","timestamp":1605510071570,"user_tz":-480,"elapsed":672,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}}},"source":["def get_user_feature_layer(uid_embed_layer, gender_embed_layer, age_embed_layer, job_embed_layer):\n","    #第一层全连接\n","    uid_fc_layer = tf.keras.layers.Dense(embed_dim, name=\"uid_fc_layer\", activation='relu')(uid_embed_layer)\n","    gender_fc_layer = tf.keras.layers.Dense(embed_dim, name=\"gender_fc_layer\", activation='relu')(gender_embed_layer)\n","    age_fc_layer = tf.keras.layers.Dense(embed_dim, name=\"age_fc_layer\", activation='relu')(age_embed_layer)\n","    job_fc_layer = tf.keras.layers.Dense(embed_dim, name=\"job_fc_layer\", activation='relu')(job_embed_layer)\n","\n","    #第二层全连接\n","    user_combine_layer = tf.keras.layers.concatenate([uid_fc_layer, gender_fc_layer, age_fc_layer, job_fc_layer], 2)  #(?, 1, 128)\n","    user_combine_layer = tf.keras.layers.Dense(200, activation='tanh')(user_combine_layer)  #(?, 1, 200)\n","\n","    user_combine_layer_flat = tf.keras.layers.Reshape([200], name=\"user_combine_layer_flat\")(user_combine_layer)\n","    # dropout_layer = tf.keras.layers.Dropout(dropout_keep, name = \"dropout_layer\")(user_combine_layer_flat)\n","    return user_combine_layer, user_combine_layer_flat"],"execution_count":30,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"2GSqTaU8tXh7"},"source":["#### 2.2.3 定义Movie ID, genres, Title的嵌入矩阵"]},{"cell_type":"markdown","metadata":{"id":"V9WWJzG88nHF"},"source":["##### 2.2.3.1 定义Movie ID的嵌入矩阵"]},{"cell_type":"code","metadata":{"id":"4AUm__GV8nHF","executionInfo":{"status":"ok","timestamp":1605510073493,"user_tz":-480,"elapsed":673,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}}},"source":["def get_movie_id_embed_layer(movie_id):\n","    movie_id_embed_layer = tf.keras.layers.Embedding(movie_id_max, embed_dim, input_length=1, name='movie_id_embed_layer')(movie_id)\n","    movie_id_embed_layer_flat = tf.keras.layers.Reshape([32], name=\"movie_id_embed_layer_flat\")(movie_id_embed_layer)\n","    return movie_id_embed_layer_flat"],"execution_count":31,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"0xj2Cr5B8nHK"},"source":["##### 2.2.3.2 定义Movie genres的嵌入矩阵"]},{"cell_type":"code","metadata":{"id":"Ge5Nx3NZHBE7","executionInfo":{"status":"ok","timestamp":1605510075412,"user_tz":-480,"elapsed":702,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}}},"source":["def get_movie_categories_layers(movie_categories):\n","  movie_categories_fc_layer = tf.keras.layers.Dense(embed_dim, name=\"movie_categories_fc_layer\", activation='relu')(movie_categories)\n","  return movie_categories_fc_layer"],"execution_count":32,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"EX-QjjY4tpFy"},"source":["##### 2.2.3.3 定义Movie Title的嵌入矩阵"]},{"cell_type":"code","metadata":{"id":"6FUeTyyk8nHL","executionInfo":{"status":"ok","timestamp":1605510077315,"user_tz":-480,"elapsed":717,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}}},"source":["def get_movie_titles_layers(movie_titles):\n","  movie_titles_fc_layer = tf.keras.layers.Dense(embed_dim, name=\"movie_titles_fc_layer\", activation='relu')(movie_titles)\n","  return movie_titles_fc_layer"],"execution_count":33,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"50i_PZhY8nHc"},"source":["#### 2.2.4 将Movie的嵌入矩阵一起全连接生成movie的特征"]},{"cell_type":"code","metadata":{"id":"9djEwRQS8nHd","executionInfo":{"status":"ok","timestamp":1605510084782,"user_tz":-480,"elapsed":750,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}}},"source":["def get_movie_feature_layer(movie_id_embed_layer_flat, movie_categories_fc_layer, movie_titles_fc_layer):\n","    #第一层全连接\n","    movie_id_fc_layer = tf.keras.layers.Dense(embed_dim, name=\"movie_id_fc_layer\", activation='relu')(movie_id_embed_layer_flat)\n","\n","    #第二层全连接\n","    movie_combine_layer = tf.keras.layers.concatenate([movie_id_fc_layer, movie_categories_fc_layer, movie_titles_fc_layer], 1)  \n","    movie_combine_layer = tf.keras.layers.Dense(200, activation='tanh')(movie_combine_layer)\n","\n","    movie_combine_layer_flat = tf.keras.layers.Reshape([200], name=\"movie_combine_layer_flat\")(movie_combine_layer)\n","    # dropout_layer1 = tf.keras.layers.Dropout(dropout_keep, name = \"dropout_layer1\")(movie_combine_layer_flat)\n","    return movie_combine_layer, movie_combine_layer_flat"],"execution_count":34,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"OczD316N8nHt"},"source":["#### 2.2.5 构建Tensorflow计算图"]},{"cell_type":"code","metadata":{"id":"ulvsrkcO8nHu","executionInfo":{"status":"ok","timestamp":1605510086960,"user_tz":-480,"elapsed":1074,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}}},"source":["MODEL_DIR = \"./models\"\n","\n","\n","class mv_network(object):\n","    def __init__(self, batch_size=256):\n","        self.batch_size = batch_size\n","        self.best_loss = 9999\n","        self.losses = {'train': [], 'test': []}\n","\n","        # 获取输入占位符\n","        uid, user_gender, user_age, user_job, movie_id, movie_categories, movie_titles = get_inputs()\n","        # 获取User的4个嵌入向量\n","        uid_embed_layer, gender_embed_layer, age_embed_layer, job_embed_layer = get_user_embedding(uid, user_gender, user_age, user_job)\n","        # 得到用户特征\n","        user_combine_layer, user_combine_layer_flat = get_user_feature_layer(uid_embed_layer, gender_embed_layer, age_embed_layer, job_embed_layer)\n","        # 获取电影ID的嵌入向量\n","        movie_id_embed_layer_flat = get_movie_id_embed_layer(movie_id)\n","        # 获取电影种类的特征向量\n","        movie_categories_fc_layer = get_movie_categories_layers(movie_categories)\n","        # 获取电影名的特征向量\n","        movie_titles_fc_layer = get_movie_titles_layers(movie_titles)\n","        # 得到电影特征\n","        movie_combine_layer, movie_combine_layer_flat = get_movie_feature_layer(movie_id_embed_layer_flat,movie_titles_fc_layer, movie_titles_fc_layer)\n","        \n","        ######## Plan 1 #########\n","        # 将用户特征和电影特征做矩阵乘法得到一个预测评分的方案\n","        inference = tf.keras.layers.Lambda(lambda layer: \n","            tf.reduce_sum(layer[0] * layer[1], axis=1), name=\"inference\")((user_combine_layer_flat, movie_combine_layer_flat))\n","        inference = tf.keras.layers.Lambda(lambda layer: tf.expand_dims(layer, axis=1))(inference)\n","        \n","        ######## Plan 2 #########\n","        # # 将用户特征和电影特征作为输入，经过全连接，输出一个值的方案\n","        # inference_layer = tf.keras.layers.concatenate([user_combine_layer_flat, movie_combine_layer_flat],1)  # (?, 400)\n","        # # 你可以使用下面这个全连接层，试试效果\n","        # inference_dense = tf.keras.layers.Dense(64, kernel_regularizer=tf.nn.l2_loss, activation='relu')(inference_layer)\n","        # inference = tf.keras.layers.Dense(1, name=\"inference\")(inference_layer)  # inference_dense\n","\n","        self.model = tf.keras.Model(\n","            inputs=[uid, user_gender, user_age, user_job, movie_id, movie_categories, movie_titles],\n","            outputs=[inference])\n","\n","        self.model.summary()\n","\n","        self.optimizer = tf.keras.optimizers.Adam(learning_rate)\n","        # MSE损失，将计算值回归到评分\n","        self.ComputeLoss = tf.keras.losses.MeanSquaredError()\n","        self.ComputeMetrics = tf.keras.metrics.MeanSquaredError()\n","\n","        if tf.io.gfile.exists(MODEL_DIR):\n","            print('Removing existing model dir: {}'.format(MODEL_DIR))\n","            tf.io.gfile.rmtree(MODEL_DIR)\n","            pass\n","        else:\n","            tf.io.gfile.makedirs(MODEL_DIR)\n","\n","        train_dir = os.path.join(MODEL_DIR, 'summaries', 'train')\n","        test_dir = os.path.join(MODEL_DIR, 'summaries', 'eval')\n","\n","        #         self.train_summary_writer = summary_ops_v2.create_file_writer(train_dir, flush_millis=10000)\n","        #         self.test_summary_writer = summary_ops_v2.create_file_writer(test_dir, flush_millis=10000, name='test')\n","\n","        checkpoint_dir = os.path.join(MODEL_DIR, 'checkpoints')\n","        self.checkpoint_prefix = os.path.join(checkpoint_dir, 'ckpt')\n","        self.checkpoint = tf.train.Checkpoint(model=self.model, optimizer=self.optimizer)\n","\n","        # Restore variables on creation if a checkpoint exists.\n","        self.checkpoint.restore(tf.train.latest_checkpoint(checkpoint_dir))\n","\n","    def compute_loss(self, labels, logits):\n","        return tf.reduce_mean(tf.keras.losses.mse(labels, logits))\n","\n","    def compute_metrics(self, labels, logits):\n","        return tf.keras.metrics.mse(labels, logits)  #\n","\n","    @tf.function\n","    def train_step(self, x, y):\n","        # Record the operations used to compute the loss, so that the gradient\n","        # of the loss with respect to the variables can be computed.\n","        #         metrics = 0\n","        with tf.GradientTape() as tape:\n","            logits = self.model([x[0],\n","                                 x[1],\n","                                 x[2],\n","                                 x[3],\n","                                 x[4],\n","                                 x[5],\n","                                 x[6]], training=True)\n","            loss = self.ComputeLoss(y, logits)\n","            # loss = self.compute_loss(labels, logits)\n","            self.ComputeMetrics(y, logits)\n","            # metrics = self.compute_metrics(labels, logits)\n","        grads = tape.gradient(loss, self.model.trainable_variables)\n","        self.optimizer.apply_gradients(zip(grads, self.model.trainable_variables))\n","        return loss, logits\n","\n","    def training(self, features, targets_values, epochs=7, log_freq=50):\n","        train_X, test_X, train_y, test_y = train_test_split(features, targets_values, test_size=0.2, random_state=0)\n","        for epoch_i in range(epochs):\n","            # 将训练集shuffle\n","            state = np.random.get_state()\n","            np.random.shuffle(train_X)\n","\n","            np.random.set_state(state)\n","            np.random.shuffle(train_y)\n","\n","            train_batches = get_batches(train_X, train_y, self.batch_size)\n","            batch_num = (len(train_X) // self.batch_size)\n","\n","            train_start = time.time()\n","            #             with self.train_summary_writer.as_default():\n","            if True:\n","                start = time.time()\n","                # Metrics are stateful. They accumulate values and return a cumulative\n","                # result when you call .result(). Clear accumulated values with .reset_states()\n","                avg_loss = tf.keras.metrics.Mean('loss', dtype=tf.float32)\n","                #                 avg_mae = tf.keras.metrics.Mean('mae', dtype=tf.float32)\n","\n","                # Datasets can be iterated over like any other Python iterable.\n","                for batch_i in range(batch_num):\n","                    x, y = next(train_batches)\n","                    categories = np.zeros([self.batch_size, 18])\n","                    for i in range(self.batch_size):\n","                        categories[i] = x.take(6, 1)[i]\n","\n","                    titles = np.zeros([self.batch_size, sentences_size])\n","                    for i in range(self.batch_size):\n","                        titles[i] = x.take(5, 1)[i]\n","\n","                    loss, logits = self.train_step([np.reshape(x.take(0, 1), [self.batch_size, 1]).astype(np.float32),\n","                                                    np.reshape(x.take(2, 1), [self.batch_size, 1]).astype(np.float32),\n","                                                    np.reshape(x.take(3, 1), [self.batch_size, 1]).astype(np.float32),\n","                                                    np.reshape(x.take(4, 1), [self.batch_size, 1]).astype(np.float32),\n","                                                    np.reshape(x.take(1, 1), [self.batch_size, 1]).astype(np.float32),\n","                                                    categories.astype(np.float32),\n","                                                    titles.astype(np.float32)],\n","                                                   np.reshape(y, [self.batch_size, 1]).astype(np.float32))\n","                    avg_loss(loss)\n","                    self.losses['train'].append(loss)\n","\n","                    if tf.equal(self.optimizer.iterations % log_freq, 0):\n","                        #                         summary_ops_v2.scalar('loss', avg_loss.result(), step=self.optimizer.iterations)\n","                        #                         summary_ops_v2.scalar('mae', self.ComputeMetrics.result(), step=self.optimizer.iterations)\n","                        # summary_ops_v2.scalar('mae', avg_mae.result(), step=self.optimizer.iterations)\n","\n","                        rate = log_freq / (time.time() - start)\n","                        print('Step #{}\\tEpoch {:>3} Batch {:>4}/{}   Loss: {:0.6f} mse: {:0.6f} ({} steps/sec)'.format(\n","                            self.optimizer.iterations.numpy(),\n","                            epoch_i,\n","                            batch_i,\n","                            batch_num,\n","                            loss, (self.ComputeMetrics.result()), rate))\n","                        # print('Step #{}\\tLoss: {:0.6f} mae: {:0.6f} ({} steps/sec)'.format(\n","                        #     self.optimizer.iterations.numpy(), loss, (avg_mae.result()), rate))\n","                        avg_loss.reset_states()\n","                        self.ComputeMetrics.reset_states()\n","                        # avg_mae.reset_states()\n","                        start = time.time()\n","\n","            train_end = time.time()\n","            print(\n","                '\\nTrain time for epoch #{} ({} total steps): {}'.format(epoch_i + 1, self.optimizer.iterations.numpy(),\n","                                                                         train_end - train_start))\n","            #             with self.test_summary_writer.as_default():\n","            self.testing((test_X, test_y), self.optimizer.iterations)\n","            # self.checkpoint.save(self.checkpoint_prefix)\n","        self.export_path = os.path.join(MODEL_DIR, 'export')\n","        tf.saved_model.save(self.model, self.export_path)\n","\n","    def testing(self, test_dataset, step_num):\n","        test_X, test_y = test_dataset\n","        test_batches = get_batches(test_X, test_y, self.batch_size)\n","\n","        \"\"\"Perform an evaluation of `model` on the examples from `dataset`.\"\"\"\n","        avg_loss = tf.keras.metrics.Mean('loss', dtype=tf.float32)\n","        #         avg_mae = tf.keras.metrics.Mean('mae', dtype=tf.float32)\n","\n","        batch_num = (len(test_X) // self.batch_size)\n","        for batch_i in range(batch_num):\n","            x, y = next(test_batches)\n","            categories = np.zeros([self.batch_size, 18])\n","            for i in range(self.batch_size):\n","                categories[i] = x.take(6, 1)[i]\n","\n","            titles = np.zeros([self.batch_size, sentences_size])\n","            for i in range(self.batch_size):\n","                titles[i] = x.take(5, 1)[i]\n","\n","            logits = self.model([np.reshape(x.take(0, 1), [self.batch_size, 1]).astype(np.float32),\n","                                 np.reshape(x.take(2, 1), [self.batch_size, 1]).astype(np.float32),\n","                                 np.reshape(x.take(3, 1), [self.batch_size, 1]).astype(np.float32),\n","                                 np.reshape(x.take(4, 1), [self.batch_size, 1]).astype(np.float32),\n","                                 np.reshape(x.take(1, 1), [self.batch_size, 1]).astype(np.float32),\n","                                 categories.astype(np.float32),\n","                                 titles.astype(np.float32)], training=False)\n","            test_loss = self.ComputeLoss(np.reshape(y, [self.batch_size, 1]).astype(np.float32), logits)\n","            avg_loss(test_loss)\n","            # 保存测试损失\n","            self.losses['test'].append(test_loss)\n","            self.ComputeMetrics(np.reshape(y, [self.batch_size, 1]).astype(np.float32), logits)\n","            # avg_loss(self.compute_loss(labels, logits))\n","            # avg_mae(self.compute_metrics(labels, logits))\n","\n","        print('Model test set loss: {:0.6f} mse: {:0.6f}'.format(avg_loss.result(), self.ComputeMetrics.result()))\n","        # print('Model test set loss: {:0.6f} mae: {:0.6f}'.format(avg_loss.result(), avg_mae.result()))\n","        #         summary_ops_v2.scalar('loss', avg_loss.result(), step=step_num)\n","        #         summary_ops_v2.scalar('mae', self.ComputeMetrics.result(), step=step_num)\n","        # summary_ops_v2.scalar('mae', avg_mae.result(), step=step_num)\n","\n","        if avg_loss.result() < self.best_loss:\n","            self.best_loss = avg_loss.result()\n","            print(\"best loss = {}\".format(self.best_loss))\n","            self.checkpoint.save(self.checkpoint_prefix)\n","\n","    def forward(self, xs):\n","        predictions = self.model(xs)\n","        # logits = tf.nn.softmax(predictions)\n","\n","        return predictions"],"execution_count":35,"outputs":[]},{"cell_type":"code","metadata":{"id":"Wa3Gui4I8nHz","executionInfo":{"status":"ok","timestamp":1605510089430,"user_tz":-480,"elapsed":743,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}}},"source":["def get_batches(Xs, ys, batch_size):\n","    for start in range(0, len(Xs), batch_size):\n","        end = min(start + batch_size, len(Xs))\n","        yield Xs[start:end], ys[start:end]"],"execution_count":36,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"LOCTMXlD8nH4"},"source":["### 2.3 训练神经网络"]},{"cell_type":"code","metadata":{"id":"aRESiEPr8nH6","executionInfo":{"status":"ok","timestamp":1605510797037,"user_tz":-480,"elapsed":704441,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}},"outputId":"0418c31f-84be-4077-e369-5361595c9375","colab":{"base_uri":"https://localhost:8080/"}},"source":["mv_net=mv_network()\n","mv_net.training(features, targets_values, epochs=7)"],"execution_count":37,"outputs":[{"output_type":"stream","text":["Model: \"functional_1\"\n","__________________________________________________________________________________________________\n","Layer (type)                    Output Shape         Param #     Connected to                     \n","==================================================================================================\n","movie_id (InputLayer)           [(None, 1)]          0                                            \n","__________________________________________________________________________________________________\n","uid (InputLayer)                [(None, 1)]          0                                            \n","__________________________________________________________________________________________________\n","user_gender (InputLayer)        [(None, 1)]          0                                            \n","__________________________________________________________________________________________________\n","user_age (InputLayer)           [(None, 1)]          0                                            \n","__________________________________________________________________________________________________\n","user_job (InputLayer)           [(None, 1)]          0                                            \n","__________________________________________________________________________________________________\n","movie_id_embed_layer (Embedding (None, 1, 32)        126496      movie_id[0][0]                   \n","__________________________________________________________________________________________________\n","uid_embed_layer (Embedding)     (None, 1, 32)        193312      uid[0][0]                        \n","__________________________________________________________________________________________________\n","gender_embed_layer (Embedding)  (None, 1, 16)        32          user_gender[0][0]                \n","__________________________________________________________________________________________________\n","age_embed_layer (Embedding)     (None, 1, 16)        112         user_age[0][0]                   \n","__________________________________________________________________________________________________\n","job_embed_layer (Embedding)     (None, 1, 16)        336         user_job[0][0]                   \n","__________________________________________________________________________________________________\n","movie_id_embed_layer_flat (Resh (None, 32)           0           movie_id_embed_layer[0][0]       \n","__________________________________________________________________________________________________\n","movie_titles (InputLayer)       [(None, 768)]        0                                            \n","__________________________________________________________________________________________________\n","uid_fc_layer (Dense)            (None, 1, 32)        1056        uid_embed_layer[0][0]            \n","__________________________________________________________________________________________________\n","gender_fc_layer (Dense)         (None, 1, 32)        544         gender_embed_layer[0][0]         \n","__________________________________________________________________________________________________\n","age_fc_layer (Dense)            (None, 1, 32)        544         age_embed_layer[0][0]            \n","__________________________________________________________________________________________________\n","job_fc_layer (Dense)            (None, 1, 32)        544         job_embed_layer[0][0]            \n","__________________________________________________________________________________________________\n","movie_id_fc_layer (Dense)       (None, 32)           1056        movie_id_embed_layer_flat[0][0]  \n","__________________________________________________________________________________________________\n","movie_titles_fc_layer (Dense)   (None, 32)           24608       movie_titles[0][0]               \n","__________________________________________________________________________________________________\n","concatenate (Concatenate)       (None, 1, 128)       0           uid_fc_layer[0][0]               \n","                                                                 gender_fc_layer[0][0]            \n","                                                                 age_fc_layer[0][0]               \n","                                                                 job_fc_layer[0][0]               \n","__________________________________________________________________________________________________\n","concatenate_1 (Concatenate)     (None, 96)           0           movie_id_fc_layer[0][0]          \n","                                                                 movie_titles_fc_layer[0][0]      \n","                                                                 movie_titles_fc_layer[0][0]      \n","__________________________________________________________________________________________________\n","dense (Dense)                   (None, 1, 200)       25800       concatenate[0][0]                \n","__________________________________________________________________________________________________\n","dense_1 (Dense)                 (None, 200)          19400       concatenate_1[0][0]              \n","__________________________________________________________________________________________________\n","user_combine_layer_flat (Reshap (None, 200)          0           dense[0][0]                      \n","__________________________________________________________________________________________________\n","movie_combine_layer_flat (Resha (None, 200)          0           dense_1[0][0]                    \n","__________________________________________________________________________________________________\n","inference (Lambda)              (None,)              0           user_combine_layer_flat[0][0]    \n","                                                                 movie_combine_layer_flat[0][0]   \n","__________________________________________________________________________________________________\n","movie_categories (InputLayer)   [(None, 18)]         0                                            \n","__________________________________________________________________________________________________\n","lambda (Lambda)                 (None, 1)            0           inference[0][0]                  \n","==================================================================================================\n","Total params: 393,840\n","Trainable params: 393,840\n","Non-trainable params: 0\n","__________________________________________________________________________________________________\n","Removing existing model dir: ./models\n","Step #50\tEpoch   0 Batch   49/3125   Loss: 1.446336 mse: 6.468303 (21.29895522841296 steps/sec)\n","Step #100\tEpoch   0 Batch   99/3125   Loss: 1.339783 mse: 1.452173 (60.7270619208978 steps/sec)\n","Step #150\tEpoch   0 Batch  149/3125   Loss: 0.967462 mse: 1.199104 (61.58801572920858 steps/sec)\n","Step #200\tEpoch   0 Batch  199/3125   Loss: 1.031086 mse: 1.024642 (63.06600038672865 steps/sec)\n","Step #250\tEpoch   0 Batch  249/3125   Loss: 0.964895 mse: 0.991368 (61.99599021143328 steps/sec)\n","Step #300\tEpoch   0 Batch  299/3125   Loss: 0.941791 mse: 0.978534 (63.16545952176641 steps/sec)\n","Step #350\tEpoch   0 Batch  349/3125   Loss: 0.967697 mse: 0.940787 (61.70320877563756 steps/sec)\n","Step #400\tEpoch   0 Batch  399/3125   Loss: 0.986873 mse: 0.939771 (59.10858759880664 steps/sec)\n","Step #450\tEpoch   0 Batch  449/3125   Loss: 0.899498 mse: 0.912005 (62.26339694210013 steps/sec)\n","Step #500\tEpoch   0 Batch  499/3125   Loss: 0.917889 mse: 0.922301 (61.639425210666936 steps/sec)\n","Step #550\tEpoch   0 Batch  549/3125   Loss: 0.824604 mse: 0.910118 (62.10574446863606 steps/sec)\n","Step #600\tEpoch   0 Batch  599/3125   Loss: 0.865908 mse: 0.913947 (64.16334552868662 steps/sec)\n","Step #650\tEpoch   0 Batch  649/3125   Loss: 0.778834 mse: 0.910963 (61.83201132885553 steps/sec)\n","Step #700\tEpoch   0 Batch  699/3125   Loss: 0.963201 mse: 0.915926 (63.05223455414898 steps/sec)\n","Step #750\tEpoch   0 Batch  749/3125   Loss: 0.941497 mse: 0.879395 (61.925071664881195 steps/sec)\n","Step #800\tEpoch   0 Batch  799/3125   Loss: 0.760762 mse: 0.883952 (63.22872456373985 steps/sec)\n","Step #850\tEpoch   0 Batch  849/3125   Loss: 1.053151 mse: 0.882922 (61.86278136380879 steps/sec)\n","Step #900\tEpoch   0 Batch  899/3125   Loss: 0.926195 mse: 0.881672 (62.02391518511629 steps/sec)\n","Step #950\tEpoch   0 Batch  949/3125   Loss: 0.814268 mse: 0.886293 (64.09535670897102 steps/sec)\n","Step #1000\tEpoch   0 Batch  999/3125   Loss: 0.764853 mse: 0.877820 (63.70333469013323 steps/sec)\n","Step #1050\tEpoch   0 Batch 1049/3125   Loss: 0.730999 mse: 0.845677 (61.88954534991471 steps/sec)\n","Step #1100\tEpoch   0 Batch 1099/3125   Loss: 0.903161 mse: 0.867228 (64.03118706498893 steps/sec)\n","Step #1150\tEpoch   0 Batch 1149/3125   Loss: 0.902896 mse: 0.848962 (63.51204960667479 steps/sec)\n","Step #1200\tEpoch   0 Batch 1199/3125   Loss: 0.794482 mse: 0.875652 (63.97013113383949 steps/sec)\n","Step #1250\tEpoch   0 Batch 1249/3125   Loss: 0.862669 mse: 0.855263 (63.30696187247032 steps/sec)\n","Step #1300\tEpoch   0 Batch 1299/3125   Loss: 0.786427 mse: 0.869535 (62.52156196579541 steps/sec)\n","Step #1350\tEpoch   0 Batch 1349/3125   Loss: 0.829890 mse: 0.872772 (61.33685943529138 steps/sec)\n","Step #1400\tEpoch   0 Batch 1399/3125   Loss: 0.867619 mse: 0.875311 (63.444646364842896 steps/sec)\n","Step #1450\tEpoch   0 Batch 1449/3125   Loss: 0.955670 mse: 0.848363 (63.452075219600275 steps/sec)\n","Step #1500\tEpoch   0 Batch 1499/3125   Loss: 0.955972 mse: 0.849949 (64.35220104171205 steps/sec)\n","Step #1550\tEpoch   0 Batch 1549/3125   Loss: 0.840524 mse: 0.861808 (62.75324650453544 steps/sec)\n","Step #1600\tEpoch   0 Batch 1599/3125   Loss: 0.871634 mse: 0.862201 (63.34026995436327 steps/sec)\n","Step #1650\tEpoch   0 Batch 1649/3125   Loss: 0.934624 mse: 0.899567 (63.34264224481893 steps/sec)\n","Step #1700\tEpoch   0 Batch 1699/3125   Loss: 0.873988 mse: 0.862966 (61.40960104807493 steps/sec)\n","Step #1750\tEpoch   0 Batch 1749/3125   Loss: 0.878896 mse: 0.875414 (63.395145922207064 steps/sec)\n","Step #1800\tEpoch   0 Batch 1799/3125   Loss: 0.806684 mse: 0.853555 (63.77256889644657 steps/sec)\n","Step #1850\tEpoch   0 Batch 1849/3125   Loss: 0.896253 mse: 0.861394 (63.89326424302176 steps/sec)\n","Step #1900\tEpoch   0 Batch 1899/3125   Loss: 0.889616 mse: 0.839301 (62.61809463096967 steps/sec)\n","Step #1950\tEpoch   0 Batch 1949/3125   Loss: 0.976565 mse: 0.857667 (63.05754297870421 steps/sec)\n","Step #2000\tEpoch   0 Batch 1999/3125   Loss: 0.752855 mse: 0.851679 (64.03192998461758 steps/sec)\n","Step #2050\tEpoch   0 Batch 2049/3125   Loss: 0.826554 mse: 0.868012 (62.80353590921968 steps/sec)\n","Step #2100\tEpoch   0 Batch 2099/3125   Loss: 0.903911 mse: 0.855215 (61.284484635424654 steps/sec)\n","Step #2150\tEpoch   0 Batch 2149/3125   Loss: 0.908140 mse: 0.842654 (63.09954894764982 steps/sec)\n","Step #2200\tEpoch   0 Batch 2199/3125   Loss: 0.923276 mse: 0.848532 (63.49829987071145 steps/sec)\n","Step #2250\tEpoch   0 Batch 2249/3125   Loss: 0.839799 mse: 0.846650 (62.819281994998185 steps/sec)\n","Step #2300\tEpoch   0 Batch 2299/3125   Loss: 0.991292 mse: 0.844667 (61.88046928965367 steps/sec)\n","Step #2350\tEpoch   0 Batch 2349/3125   Loss: 0.975274 mse: 0.838940 (61.427084715489016 steps/sec)\n","Step #2400\tEpoch   0 Batch 2399/3125   Loss: 0.766942 mse: 0.828400 (61.84864195004042 steps/sec)\n","Step #2450\tEpoch   0 Batch 2449/3125   Loss: 0.960745 mse: 0.828345 (63.32003618370598 steps/sec)\n","Step #2500\tEpoch   0 Batch 2499/3125   Loss: 0.943038 mse: 0.866202 (64.1791917190667 steps/sec)\n","Step #2550\tEpoch   0 Batch 2549/3125   Loss: 0.880563 mse: 0.866342 (62.33983657861444 steps/sec)\n","Step #2600\tEpoch   0 Batch 2599/3125   Loss: 0.921361 mse: 0.852200 (63.52493938003305 steps/sec)\n","Step #2650\tEpoch   0 Batch 2649/3125   Loss: 0.871552 mse: 0.855504 (64.54685971662997 steps/sec)\n","Step #2700\tEpoch   0 Batch 2699/3125   Loss: 0.924136 mse: 0.845789 (61.46590091430129 steps/sec)\n","Step #2750\tEpoch   0 Batch 2749/3125   Loss: 0.854233 mse: 0.835554 (64.06121083102782 steps/sec)\n","Step #2800\tEpoch   0 Batch 2799/3125   Loss: 0.769774 mse: 0.846179 (63.07876664533113 steps/sec)\n","Step #2850\tEpoch   0 Batch 2849/3125   Loss: 0.846930 mse: 0.853957 (63.94060205302447 steps/sec)\n","Step #2900\tEpoch   0 Batch 2899/3125   Loss: 0.853260 mse: 0.834662 (64.69099410543343 steps/sec)\n","Step #2950\tEpoch   0 Batch 2949/3125   Loss: 0.767411 mse: 0.841581 (63.18576594458736 steps/sec)\n","Step #3000\tEpoch   0 Batch 2999/3125   Loss: 0.810327 mse: 0.850160 (61.528116193748176 steps/sec)\n","Step #3050\tEpoch   0 Batch 3049/3125   Loss: 0.991333 mse: 0.828040 (62.973452773033344 steps/sec)\n","Step #3100\tEpoch   0 Batch 3099/3125   Loss: 0.867230 mse: 0.842891 (63.07804567879029 steps/sec)\n","\n","Train time for epoch #1 (3125 total steps): 51.411123752593994\n","Model test set loss: 0.840560 mse: 0.841159\n","best loss = 0.8405604362487793\n","Step #3150\tEpoch   1 Batch   24/3125   Loss: 0.939552 mse: 0.840590 (121.78752781688014 steps/sec)\n","Step #3200\tEpoch   1 Batch   74/3125   Loss: 0.849181 mse: 0.816748 (65.2476867840231 steps/sec)\n","Step #3250\tEpoch   1 Batch  124/3125   Loss: 0.840945 mse: 0.799794 (63.715934422005894 steps/sec)\n","Step #3300\tEpoch   1 Batch  174/3125   Loss: 0.826288 mse: 0.808123 (63.309790359254755 steps/sec)\n","Step #3350\tEpoch   1 Batch  224/3125   Loss: 0.811699 mse: 0.811302 (62.1304366116984 steps/sec)\n","Step #3400\tEpoch   1 Batch  274/3125   Loss: 0.719292 mse: 0.822379 (62.9247412231299 steps/sec)\n","Step #3450\tEpoch   1 Batch  324/3125   Loss: 0.710022 mse: 0.816678 (63.619077666074105 steps/sec)\n","Step #3500\tEpoch   1 Batch  374/3125   Loss: 0.881750 mse: 0.821466 (61.61043347157709 steps/sec)\n","Step #3550\tEpoch   1 Batch  424/3125   Loss: 0.788694 mse: 0.813771 (62.60261741766949 steps/sec)\n","Step #3600\tEpoch   1 Batch  474/3125   Loss: 0.898079 mse: 0.832876 (63.93567019511923 steps/sec)\n","Step #3650\tEpoch   1 Batch  524/3125   Loss: 0.880008 mse: 0.829884 (62.59701161975415 steps/sec)\n","Step #3700\tEpoch   1 Batch  574/3125   Loss: 0.703413 mse: 0.802184 (63.28892665897316 steps/sec)\n","Step #3750\tEpoch   1 Batch  624/3125   Loss: 0.760301 mse: 0.816061 (63.92927745642714 steps/sec)\n","Step #3800\tEpoch   1 Batch  674/3125   Loss: 0.823218 mse: 0.816386 (61.47891062693097 steps/sec)\n","Step #3850\tEpoch   1 Batch  724/3125   Loss: 0.786557 mse: 0.823580 (64.98694157734838 steps/sec)\n","Step #3900\tEpoch   1 Batch  774/3125   Loss: 0.802562 mse: 0.836288 (62.865512327282254 steps/sec)\n","Step #3950\tEpoch   1 Batch  824/3125   Loss: 0.688072 mse: 0.821608 (60.79141966809189 steps/sec)\n","Step #4000\tEpoch   1 Batch  874/3125   Loss: 0.750464 mse: 0.813318 (62.23097144793586 steps/sec)\n","Step #4050\tEpoch   1 Batch  924/3125   Loss: 0.850963 mse: 0.811795 (61.471287925064985 steps/sec)\n","Step #4100\tEpoch   1 Batch  974/3125   Loss: 0.682716 mse: 0.804208 (63.32829642621173 steps/sec)\n","Step #4150\tEpoch   1 Batch 1024/3125   Loss: 0.717250 mse: 0.831747 (63.29461886845754 steps/sec)\n","Step #4200\tEpoch   1 Batch 1074/3125   Loss: 0.940751 mse: 0.823350 (62.51433075166171 steps/sec)\n","Step #4250\tEpoch   1 Batch 1124/3125   Loss: 0.798035 mse: 0.811371 (63.15764112917798 steps/sec)\n","Step #4300\tEpoch   1 Batch 1174/3125   Loss: 0.763223 mse: 0.806220 (63.95762573075517 steps/sec)\n","Step #4350\tEpoch   1 Batch 1224/3125   Loss: 0.760890 mse: 0.812449 (65.0460810483043 steps/sec)\n","Step #4400\tEpoch   1 Batch 1274/3125   Loss: 0.787385 mse: 0.825315 (63.933954944614406 steps/sec)\n","Step #4450\tEpoch   1 Batch 1324/3125   Loss: 0.764623 mse: 0.811571 (62.65270302769574 steps/sec)\n","Step #4500\tEpoch   1 Batch 1374/3125   Loss: 0.941075 mse: 0.818365 (62.52687461929796 steps/sec)\n","Step #4550\tEpoch   1 Batch 1424/3125   Loss: 0.767061 mse: 0.826164 (63.25498568194308 steps/sec)\n","Step #4600\tEpoch   1 Batch 1474/3125   Loss: 0.687737 mse: 0.801785 (63.927231270556895 steps/sec)\n","Step #4650\tEpoch   1 Batch 1524/3125   Loss: 0.769520 mse: 0.800064 (62.385734841469315 steps/sec)\n","Step #4700\tEpoch   1 Batch 1574/3125   Loss: 0.846156 mse: 0.803795 (63.233204765454076 steps/sec)\n","Step #4750\tEpoch   1 Batch 1624/3125   Loss: 0.762625 mse: 0.808965 (63.25574885819131 steps/sec)\n","Step #4800\tEpoch   1 Batch 1674/3125   Loss: 0.897915 mse: 0.826517 (64.69897720089381 steps/sec)\n","Step #4850\tEpoch   1 Batch 1724/3125   Loss: 0.731890 mse: 0.800391 (60.97440917695747 steps/sec)\n","Step #4900\tEpoch   1 Batch 1774/3125   Loss: 0.845242 mse: 0.814103 (60.929483519870956 steps/sec)\n","Step #4950\tEpoch   1 Batch 1824/3125   Loss: 0.773050 mse: 0.804612 (62.129516284041365 steps/sec)\n","Step #5000\tEpoch   1 Batch 1874/3125   Loss: 0.896273 mse: 0.834357 (63.461445351460746 steps/sec)\n","Step #5050\tEpoch   1 Batch 1924/3125   Loss: 0.858499 mse: 0.812194 (63.26832483833354 steps/sec)\n","Step #5100\tEpoch   1 Batch 1974/3125   Loss: 0.683120 mse: 0.796210 (63.29484810639283 steps/sec)\n","Step #5150\tEpoch   1 Batch 2024/3125   Loss: 0.864795 mse: 0.832673 (62.178312815779634 steps/sec)\n","Step #5200\tEpoch   1 Batch 2074/3125   Loss: 0.822491 mse: 0.814079 (61.75399251703044 steps/sec)\n","Step #5250\tEpoch   1 Batch 2124/3125   Loss: 0.895554 mse: 0.831577 (61.41429475904909 steps/sec)\n","Step #5300\tEpoch   1 Batch 2174/3125   Loss: 0.771541 mse: 0.821406 (61.70738460569721 steps/sec)\n","Step #5350\tEpoch   1 Batch 2224/3125   Loss: 0.805371 mse: 0.806761 (61.88806597137892 steps/sec)\n","Step #5400\tEpoch   1 Batch 2274/3125   Loss: 0.872807 mse: 0.815105 (61.89380124056055 steps/sec)\n","Step #5450\tEpoch   1 Batch 2324/3125   Loss: 0.923786 mse: 0.797116 (62.315366592529536 steps/sec)\n","Step #5500\tEpoch   1 Batch 2374/3125   Loss: 0.852572 mse: 0.790620 (61.81054334220193 steps/sec)\n","Step #5550\tEpoch   1 Batch 2424/3125   Loss: 0.840238 mse: 0.801337 (61.97495766681344 steps/sec)\n","Step #5600\tEpoch   1 Batch 2474/3125   Loss: 0.830354 mse: 0.802662 (63.11398124654471 steps/sec)\n","Step #5650\tEpoch   1 Batch 2524/3125   Loss: 0.829235 mse: 0.806920 (62.162094067522055 steps/sec)\n","Step #5700\tEpoch   1 Batch 2574/3125   Loss: 0.823767 mse: 0.796332 (62.74414063960876 steps/sec)\n","Step #5750\tEpoch   1 Batch 2624/3125   Loss: 0.924529 mse: 0.796737 (62.973396043923834 steps/sec)\n","Step #5800\tEpoch   1 Batch 2674/3125   Loss: 0.763748 mse: 0.801204 (61.16494292414901 steps/sec)\n","Step #5850\tEpoch   1 Batch 2724/3125   Loss: 0.770263 mse: 0.794402 (61.80416778040688 steps/sec)\n","Step #5900\tEpoch   1 Batch 2774/3125   Loss: 0.758116 mse: 0.797868 (60.75688260112159 steps/sec)\n","Step #5950\tEpoch   1 Batch 2824/3125   Loss: 0.852605 mse: 0.802837 (60.92852762081902 steps/sec)\n","Step #6000\tEpoch   1 Batch 2874/3125   Loss: 0.902130 mse: 0.799063 (63.69321593411616 steps/sec)\n","Step #6050\tEpoch   1 Batch 2924/3125   Loss: 0.788894 mse: 0.811522 (62.077286392058475 steps/sec)\n","Step #6100\tEpoch   1 Batch 2974/3125   Loss: 0.798465 mse: 0.802653 (63.39284634711975 steps/sec)\n","Step #6150\tEpoch   1 Batch 3024/3125   Loss: 0.757853 mse: 0.792354 (63.72906202299732 steps/sec)\n","Step #6200\tEpoch   1 Batch 3074/3125   Loss: 0.866082 mse: 0.803143 (63.44932998793733 steps/sec)\n","Step #6250\tEpoch   1 Batch 3124/3125   Loss: 0.864308 mse: 0.807296 (62.64793040818277 steps/sec)\n","\n","Train time for epoch #2 (6250 total steps): 49.93404293060303\n","Model test set loss: 0.802565 mse: 0.802565\n","best loss = 0.8025650978088379\n","Step #6300\tEpoch   2 Batch   49/3125   Loss: 0.813889 mse: 0.800801 (62.61095322670837 steps/sec)\n","Step #6350\tEpoch   2 Batch   99/3125   Loss: 0.662282 mse: 0.769048 (64.39642476819581 steps/sec)\n","Step #6400\tEpoch   2 Batch  149/3125   Loss: 0.800625 mse: 0.780482 (61.95910109385193 steps/sec)\n","Step #6450\tEpoch   2 Batch  199/3125   Loss: 0.683637 mse: 0.765284 (63.107390943767776 steps/sec)\n","Step #6500\tEpoch   2 Batch  249/3125   Loss: 0.695655 mse: 0.782494 (63.75221307807545 steps/sec)\n","Step #6550\tEpoch   2 Batch  299/3125   Loss: 0.767341 mse: 0.808741 (62.22297650533382 steps/sec)\n","Step #6600\tEpoch   2 Batch  349/3125   Loss: 0.704351 mse: 0.775135 (58.49762107390724 steps/sec)\n","Step #6650\tEpoch   2 Batch  399/3125   Loss: 0.865762 mse: 0.790302 (63.57277342420216 steps/sec)\n","Step #6700\tEpoch   2 Batch  449/3125   Loss: 0.659424 mse: 0.766745 (61.186053975200586 steps/sec)\n","Step #6750\tEpoch   2 Batch  499/3125   Loss: 0.868598 mse: 0.789623 (64.72897132223648 steps/sec)\n","Step #6800\tEpoch   2 Batch  549/3125   Loss: 0.888490 mse: 0.775693 (65.13009702345663 steps/sec)\n","Step #6850\tEpoch   2 Batch  599/3125   Loss: 0.698548 mse: 0.791246 (62.21808453985244 steps/sec)\n","Step #6900\tEpoch   2 Batch  649/3125   Loss: 0.700929 mse: 0.799207 (63.49474321613746 steps/sec)\n","Step #6950\tEpoch   2 Batch  699/3125   Loss: 0.879349 mse: 0.781322 (62.6008234531001 steps/sec)\n","Step #7000\tEpoch   2 Batch  749/3125   Loss: 0.824155 mse: 0.785065 (63.308777426154926 steps/sec)\n","Step #7050\tEpoch   2 Batch  799/3125   Loss: 0.844875 mse: 0.776201 (63.924152494842545 steps/sec)\n","Step #7100\tEpoch   2 Batch  849/3125   Loss: 0.810318 mse: 0.776105 (64.35972545523457 steps/sec)\n","Step #7150\tEpoch   2 Batch  899/3125   Loss: 0.961124 mse: 0.783892 (62.54397444263251 steps/sec)\n","Step #7200\tEpoch   2 Batch  949/3125   Loss: 0.820542 mse: 0.787878 (62.64458065076938 steps/sec)\n","Step #7250\tEpoch   2 Batch  999/3125   Loss: 0.717107 mse: 0.800213 (57.74445100076244 steps/sec)\n","Step #7300\tEpoch   2 Batch 1049/3125   Loss: 0.638832 mse: 0.782519 (63.17997909216619 steps/sec)\n","Step #7350\tEpoch   2 Batch 1099/3125   Loss: 0.699771 mse: 0.784435 (61.33219548958817 steps/sec)\n","Step #7400\tEpoch   2 Batch 1149/3125   Loss: 0.748250 mse: 0.787423 (62.383674926376536 steps/sec)\n","Step #7450\tEpoch   2 Batch 1199/3125   Loss: 0.823327 mse: 0.783031 (62.52301586544424 steps/sec)\n","Step #7500\tEpoch   2 Batch 1249/3125   Loss: 0.902379 mse: 0.790439 (61.62071598846187 steps/sec)\n","Step #7550\tEpoch   2 Batch 1299/3125   Loss: 0.860560 mse: 0.769942 (62.496353153602044 steps/sec)\n","Step #7600\tEpoch   2 Batch 1349/3125   Loss: 0.799143 mse: 0.783890 (64.4599023612376 steps/sec)\n","Step #7650\tEpoch   2 Batch 1399/3125   Loss: 0.643541 mse: 0.791632 (63.43952204492173 steps/sec)\n","Step #7700\tEpoch   2 Batch 1449/3125   Loss: 0.721747 mse: 0.792948 (63.94315600175991 steps/sec)\n","Step #7750\tEpoch   2 Batch 1499/3125   Loss: 0.964862 mse: 0.786354 (64.40306950359489 steps/sec)\n","Step #7800\tEpoch   2 Batch 1549/3125   Loss: 0.760250 mse: 0.776469 (64.68656433749196 steps/sec)\n","Step #7850\tEpoch   2 Batch 1599/3125   Loss: 0.783549 mse: 0.770666 (62.99338992815609 steps/sec)\n","Step #7900\tEpoch   2 Batch 1649/3125   Loss: 0.886457 mse: 0.775357 (62.04123653393013 steps/sec)\n","Step #7950\tEpoch   2 Batch 1699/3125   Loss: 0.819783 mse: 0.781880 (62.5314237137634 steps/sec)\n","Step #8000\tEpoch   2 Batch 1749/3125   Loss: 0.623549 mse: 0.752642 (61.679834567673936 steps/sec)\n","Step #8050\tEpoch   2 Batch 1799/3125   Loss: 0.779355 mse: 0.791897 (64.29618864980125 steps/sec)\n","Step #8100\tEpoch   2 Batch 1849/3125   Loss: 0.682919 mse: 0.785938 (63.34704293150195 steps/sec)\n","Step #8150\tEpoch   2 Batch 1899/3125   Loss: 0.781316 mse: 0.771269 (62.42060701054346 steps/sec)\n","Step #8200\tEpoch   2 Batch 1949/3125   Loss: 0.731713 mse: 0.787441 (63.9502535411754 steps/sec)\n","Step #8250\tEpoch   2 Batch 1999/3125   Loss: 0.774170 mse: 0.774091 (63.57707122844312 steps/sec)\n","Step #8300\tEpoch   2 Batch 2049/3125   Loss: 0.657740 mse: 0.782420 (63.50118393721196 steps/sec)\n","Step #8350\tEpoch   2 Batch 2099/3125   Loss: 0.696223 mse: 0.771099 (63.99923829031576 steps/sec)\n","Step #8400\tEpoch   2 Batch 2149/3125   Loss: 0.699924 mse: 0.789796 (63.900311769480716 steps/sec)\n","Step #8450\tEpoch   2 Batch 2199/3125   Loss: 0.801888 mse: 0.785113 (63.97342900485974 steps/sec)\n","Step #8500\tEpoch   2 Batch 2249/3125   Loss: 0.716592 mse: 0.768531 (62.81484143921524 steps/sec)\n","Step #8550\tEpoch   2 Batch 2299/3125   Loss: 0.862439 mse: 0.785245 (63.035916746921174 steps/sec)\n","Step #8600\tEpoch   2 Batch 2349/3125   Loss: 0.779857 mse: 0.783802 (63.361167525419674 steps/sec)\n","Step #8650\tEpoch   2 Batch 2399/3125   Loss: 0.720106 mse: 0.784975 (64.79586918424299 steps/sec)\n","Step #8700\tEpoch   2 Batch 2449/3125   Loss: 0.799831 mse: 0.786923 (62.584532982224836 steps/sec)\n","Step #8750\tEpoch   2 Batch 2499/3125   Loss: 0.880606 mse: 0.757826 (64.91558953910176 steps/sec)\n","Step #8800\tEpoch   2 Batch 2549/3125   Loss: 0.776256 mse: 0.785302 (64.1707276622802 steps/sec)\n","Step #8850\tEpoch   2 Batch 2599/3125   Loss: 0.836209 mse: 0.769369 (63.426206522777946 steps/sec)\n","Step #8900\tEpoch   2 Batch 2649/3125   Loss: 0.841205 mse: 0.770017 (63.54122259964447 steps/sec)\n","Step #8950\tEpoch   2 Batch 2699/3125   Loss: 0.708039 mse: 0.780865 (63.58125395459166 steps/sec)\n","Step #9000\tEpoch   2 Batch 2749/3125   Loss: 0.755377 mse: 0.764460 (64.32324550897101 steps/sec)\n","Step #9050\tEpoch   2 Batch 2799/3125   Loss: 0.862104 mse: 0.775527 (61.97490272241305 steps/sec)\n","Step #9100\tEpoch   2 Batch 2849/3125   Loss: 0.854668 mse: 0.789489 (63.49435873680514 steps/sec)\n","Step #9150\tEpoch   2 Batch 2899/3125   Loss: 0.786786 mse: 0.765001 (63.82808025015629 steps/sec)\n","Step #9200\tEpoch   2 Batch 2949/3125   Loss: 0.813749 mse: 0.771421 (59.36714174866448 steps/sec)\n","Step #9250\tEpoch   2 Batch 2999/3125   Loss: 0.781799 mse: 0.763343 (59.741911995745156 steps/sec)\n","Step #9300\tEpoch   2 Batch 3049/3125   Loss: 0.734099 mse: 0.781238 (57.379095385763684 steps/sec)\n","Step #9350\tEpoch   2 Batch 3099/3125   Loss: 0.854676 mse: 0.770280 (55.979943709132534 steps/sec)\n","\n","Train time for epoch #3 (9375 total steps): 49.96388864517212\n","Model test set loss: 0.785887 mse: 0.786166\n","best loss = 0.7858871817588806\n","Step #9400\tEpoch   3 Batch   24/3125   Loss: 0.716854 mse: 0.785026 (129.1955954702884 steps/sec)\n","Step #9450\tEpoch   3 Batch   74/3125   Loss: 0.734975 mse: 0.717490 (61.61658808697152 steps/sec)\n","Step #9500\tEpoch   3 Batch  124/3125   Loss: 0.889132 mse: 0.742607 (63.80782488288294 steps/sec)\n","Step #9550\tEpoch   3 Batch  174/3125   Loss: 0.681620 mse: 0.758105 (59.19424324784332 steps/sec)\n","Step #9600\tEpoch   3 Batch  224/3125   Loss: 0.770647 mse: 0.745179 (62.3934189680692 steps/sec)\n","Step #9650\tEpoch   3 Batch  274/3125   Loss: 0.577506 mse: 0.752384 (64.80239637157602 steps/sec)\n","Step #9700\tEpoch   3 Batch  324/3125   Loss: 0.703765 mse: 0.725463 (61.094541392994415 steps/sec)\n","Step #9750\tEpoch   3 Batch  374/3125   Loss: 0.748887 mse: 0.735355 (62.38267285470621 steps/sec)\n","Step #9800\tEpoch   3 Batch  424/3125   Loss: 0.768162 mse: 0.754615 (60.532654523874605 steps/sec)\n","Step #9850\tEpoch   3 Batch  474/3125   Loss: 0.616857 mse: 0.744767 (61.95836888467657 steps/sec)\n","Step #9900\tEpoch   3 Batch  524/3125   Loss: 0.615782 mse: 0.736788 (61.20932334013485 steps/sec)\n","Step #9950\tEpoch   3 Batch  574/3125   Loss: 0.544973 mse: 0.736159 (62.096145225161415 steps/sec)\n","Step #10000\tEpoch   3 Batch  624/3125   Loss: 0.762375 mse: 0.737472 (59.330812781708985 steps/sec)\n","Step #10050\tEpoch   3 Batch  674/3125   Loss: 0.842979 mse: 0.754979 (62.952167624939136 steps/sec)\n","Step #10100\tEpoch   3 Batch  724/3125   Loss: 0.588225 mse: 0.737091 (62.63631071690231 steps/sec)\n","Step #10150\tEpoch   3 Batch  774/3125   Loss: 0.683414 mse: 0.744289 (63.259660425519336 steps/sec)\n","Step #10200\tEpoch   3 Batch  824/3125   Loss: 0.809963 mse: 0.726022 (62.189412790044244 steps/sec)\n","Step #10250\tEpoch   3 Batch  874/3125   Loss: 0.808951 mse: 0.752368 (60.25123258996305 steps/sec)\n","Step #10300\tEpoch   3 Batch  924/3125   Loss: 0.717509 mse: 0.732615 (63.650029728509956 steps/sec)\n","Step #10350\tEpoch   3 Batch  974/3125   Loss: 0.859406 mse: 0.761693 (60.51834811024449 steps/sec)\n","Step #10400\tEpoch   3 Batch 1024/3125   Loss: 0.633474 mse: 0.733463 (62.761566130244304 steps/sec)\n","Step #10450\tEpoch   3 Batch 1074/3125   Loss: 0.738261 mse: 0.769771 (61.668281041127436 steps/sec)\n","Step #10500\tEpoch   3 Batch 1124/3125   Loss: 0.658405 mse: 0.736120 (60.10929525598054 steps/sec)\n","Step #10550\tEpoch   3 Batch 1174/3125   Loss: 0.688428 mse: 0.754773 (61.26622290583009 steps/sec)\n","Step #10600\tEpoch   3 Batch 1224/3125   Loss: 0.776607 mse: 0.752299 (61.01453681627285 steps/sec)\n","Step #10650\tEpoch   3 Batch 1274/3125   Loss: 0.708721 mse: 0.748704 (62.00561351098118 steps/sec)\n","Step #10700\tEpoch   3 Batch 1324/3125   Loss: 0.732476 mse: 0.750483 (60.81223835161773 steps/sec)\n","Step #10750\tEpoch   3 Batch 1374/3125   Loss: 0.718437 mse: 0.740920 (60.31557398030352 steps/sec)\n","Step #10800\tEpoch   3 Batch 1424/3125   Loss: 0.777102 mse: 0.750006 (58.681817062551346 steps/sec)\n","Step #10850\tEpoch   3 Batch 1474/3125   Loss: 0.797278 mse: 0.754545 (61.166691215180606 steps/sec)\n","Step #10900\tEpoch   3 Batch 1524/3125   Loss: 0.774994 mse: 0.747904 (62.57254472777247 steps/sec)\n","Step #10950\tEpoch   3 Batch 1574/3125   Loss: 0.819172 mse: 0.748341 (62.499556693598834 steps/sec)\n","Step #11000\tEpoch   3 Batch 1624/3125   Loss: 0.746080 mse: 0.746158 (59.11211969942665 steps/sec)\n","Step #11050\tEpoch   3 Batch 1674/3125   Loss: 0.732605 mse: 0.743719 (59.330057450078804 steps/sec)\n","Step #11100\tEpoch   3 Batch 1724/3125   Loss: 0.804639 mse: 0.747756 (61.964703066690696 steps/sec)\n","Step #11150\tEpoch   3 Batch 1774/3125   Loss: 0.785229 mse: 0.745316 (60.51227124152832 steps/sec)\n","Step #11200\tEpoch   3 Batch 1824/3125   Loss: 0.714195 mse: 0.729984 (63.52586302732565 steps/sec)\n","Step #11250\tEpoch   3 Batch 1874/3125   Loss: 0.768603 mse: 0.752765 (63.06912982337112 steps/sec)\n","Step #11300\tEpoch   3 Batch 1924/3125   Loss: 0.698240 mse: 0.742818 (60.38782471580618 steps/sec)\n","Step #11350\tEpoch   3 Batch 1974/3125   Loss: 0.763011 mse: 0.757280 (61.88203960458561 steps/sec)\n","Step #11400\tEpoch   3 Batch 2024/3125   Loss: 0.719980 mse: 0.742688 (62.398022926412864 steps/sec)\n","Step #11450\tEpoch   3 Batch 2074/3125   Loss: 0.789426 mse: 0.750616 (61.01084471348946 steps/sec)\n","Step #11500\tEpoch   3 Batch 2124/3125   Loss: 0.923945 mse: 0.744345 (62.90213053900549 steps/sec)\n","Step #11550\tEpoch   3 Batch 2174/3125   Loss: 0.588398 mse: 0.755185 (64.15041125784118 steps/sec)\n","Step #11600\tEpoch   3 Batch 2224/3125   Loss: 0.775125 mse: 0.743850 (59.0171666440127 steps/sec)\n","Step #11650\tEpoch   3 Batch 2274/3125   Loss: 0.828956 mse: 0.748778 (61.355073553462226 steps/sec)\n","Step #11700\tEpoch   3 Batch 2324/3125   Loss: 0.765290 mse: 0.752598 (61.9067003463513 steps/sec)\n","Step #11750\tEpoch   3 Batch 2374/3125   Loss: 0.719068 mse: 0.762432 (60.88497753922326 steps/sec)\n","Step #11800\tEpoch   3 Batch 2424/3125   Loss: 0.789138 mse: 0.746062 (61.57544794579874 steps/sec)\n","Step #11850\tEpoch   3 Batch 2474/3125   Loss: 0.723152 mse: 0.750022 (60.68971744140047 steps/sec)\n","Step #11900\tEpoch   3 Batch 2524/3125   Loss: 0.696145 mse: 0.763060 (59.665374627011744 steps/sec)\n","Step #11950\tEpoch   3 Batch 2574/3125   Loss: 0.711243 mse: 0.747676 (57.262718255626055 steps/sec)\n","Step #12000\tEpoch   3 Batch 2624/3125   Loss: 0.704420 mse: 0.761502 (59.76305679700642 steps/sec)\n","Step #12050\tEpoch   3 Batch 2674/3125   Loss: 0.679682 mse: 0.736816 (59.677293596125836 steps/sec)\n","Step #12100\tEpoch   3 Batch 2724/3125   Loss: 0.669592 mse: 0.749117 (61.37125101363502 steps/sec)\n","Step #12150\tEpoch   3 Batch 2774/3125   Loss: 0.770392 mse: 0.748868 (63.55345012340052 steps/sec)\n","Step #12200\tEpoch   3 Batch 2824/3125   Loss: 0.619405 mse: 0.751654 (63.71016618429283 steps/sec)\n","Step #12250\tEpoch   3 Batch 2874/3125   Loss: 0.776774 mse: 0.745754 (62.59615215284413 steps/sec)\n","Step #12300\tEpoch   3 Batch 2924/3125   Loss: 0.671521 mse: 0.753835 (62.51783432692818 steps/sec)\n","Step #12350\tEpoch   3 Batch 2974/3125   Loss: 0.995140 mse: 0.736503 (62.69512705530643 steps/sec)\n","Step #12400\tEpoch   3 Batch 3024/3125   Loss: 0.780942 mse: 0.746901 (62.46560098603308 steps/sec)\n","Step #12450\tEpoch   3 Batch 3074/3125   Loss: 0.724963 mse: 0.753163 (62.817833100591706 steps/sec)\n","Step #12500\tEpoch   3 Batch 3124/3125   Loss: 0.725360 mse: 0.733027 (60.78391363223209 steps/sec)\n","\n","Train time for epoch #4 (12500 total steps): 50.88632822036743\n","Model test set loss: 0.763582 mse: 0.763582\n","best loss = 0.7635822296142578\n","Step #12550\tEpoch   4 Batch   49/3125   Loss: 0.601495 mse: 0.759809 (62.981906552676776 steps/sec)\n","Step #12600\tEpoch   4 Batch   99/3125   Loss: 0.626874 mse: 0.713282 (63.572195288602 steps/sec)\n","Step #12650\tEpoch   4 Batch  149/3125   Loss: 0.702920 mse: 0.711309 (61.50747201495547 steps/sec)\n","Step #12700\tEpoch   4 Batch  199/3125   Loss: 0.621186 mse: 0.705960 (58.882382752671205 steps/sec)\n","Step #12750\tEpoch   4 Batch  249/3125   Loss: 0.643888 mse: 0.699946 (58.64179562312808 steps/sec)\n","Step #12800\tEpoch   4 Batch  299/3125   Loss: 0.671848 mse: 0.704741 (60.18588830744982 steps/sec)\n","Step #12850\tEpoch   4 Batch  349/3125   Loss: 0.759093 mse: 0.724253 (61.42240703907758 steps/sec)\n","Step #12900\tEpoch   4 Batch  399/3125   Loss: 0.724072 mse: 0.711260 (61.80613495630708 steps/sec)\n","Step #12950\tEpoch   4 Batch  449/3125   Loss: 0.631544 mse: 0.693045 (60.79543774470782 steps/sec)\n","Step #13000\tEpoch   4 Batch  499/3125   Loss: 0.682812 mse: 0.713407 (59.60896849566054 steps/sec)\n","Step #13050\tEpoch   4 Batch  549/3125   Loss: 0.768831 mse: 0.716022 (60.97761815483529 steps/sec)\n","Step #13100\tEpoch   4 Batch  599/3125   Loss: 0.747223 mse: 0.713224 (59.07583581882695 steps/sec)\n","Step #13150\tEpoch   4 Batch  649/3125   Loss: 0.827271 mse: 0.736776 (58.1349809169193 steps/sec)\n","Step #13200\tEpoch   4 Batch  699/3125   Loss: 0.684849 mse: 0.709490 (63.20402812842538 steps/sec)\n","Step #13250\tEpoch   4 Batch  749/3125   Loss: 0.805213 mse: 0.712862 (60.60561923934335 steps/sec)\n","Step #13300\tEpoch   4 Batch  799/3125   Loss: 0.704034 mse: 0.712764 (60.198223520442376 steps/sec)\n","Step #13350\tEpoch   4 Batch  849/3125   Loss: 0.716059 mse: 0.700668 (60.50340260090959 steps/sec)\n","Step #13400\tEpoch   4 Batch  899/3125   Loss: 0.638812 mse: 0.714736 (61.290323523403345 steps/sec)\n","Step #13450\tEpoch   4 Batch  949/3125   Loss: 0.778055 mse: 0.716567 (63.76204040767047 steps/sec)\n","Step #13500\tEpoch   4 Batch  999/3125   Loss: 0.621419 mse: 0.718222 (63.584299788098015 steps/sec)\n","Step #13550\tEpoch   4 Batch 1049/3125   Loss: 0.801187 mse: 0.719448 (64.53742453099895 steps/sec)\n","Step #13600\tEpoch   4 Batch 1099/3125   Loss: 0.855304 mse: 0.723929 (62.167677522247715 steps/sec)\n","Step #13650\tEpoch   4 Batch 1149/3125   Loss: 0.710980 mse: 0.715353 (52.65605034929497 steps/sec)\n","Step #13700\tEpoch   4 Batch 1199/3125   Loss: 0.847592 mse: 0.732967 (63.66303355287443 steps/sec)\n","Step #13750\tEpoch   4 Batch 1249/3125   Loss: 0.649470 mse: 0.740483 (62.95823412701391 steps/sec)\n","Step #13800\tEpoch   4 Batch 1299/3125   Loss: 0.653211 mse: 0.710640 (61.95727060336158 steps/sec)\n","Step #13850\tEpoch   4 Batch 1349/3125   Loss: 0.868359 mse: 0.724523 (61.30506898001255 steps/sec)\n","Step #13900\tEpoch   4 Batch 1399/3125   Loss: 0.718001 mse: 0.711773 (62.64291526225675 steps/sec)\n","Step #13950\tEpoch   4 Batch 1449/3125   Loss: 0.774025 mse: 0.715702 (61.2630908596952 steps/sec)\n","Step #14000\tEpoch   4 Batch 1499/3125   Loss: 0.701155 mse: 0.714771 (63.32389834367317 steps/sec)\n","Step #14050\tEpoch   4 Batch 1549/3125   Loss: 0.800582 mse: 0.719233 (60.279998551315344 steps/sec)\n","Step #14100\tEpoch   4 Batch 1599/3125   Loss: 0.790600 mse: 0.731433 (61.81606381950192 steps/sec)\n","Step #14150\tEpoch   4 Batch 1649/3125   Loss: 0.820614 mse: 0.724020 (56.30925367587929 steps/sec)\n","Step #14200\tEpoch   4 Batch 1699/3125   Loss: 0.777420 mse: 0.722093 (53.835895337461395 steps/sec)\n","Step #14250\tEpoch   4 Batch 1749/3125   Loss: 0.721379 mse: 0.728089 (53.250116484121975 steps/sec)\n","Step #14300\tEpoch   4 Batch 1799/3125   Loss: 0.629080 mse: 0.714677 (52.00702304312029 steps/sec)\n","Step #14350\tEpoch   4 Batch 1849/3125   Loss: 0.733673 mse: 0.727000 (52.22686482714584 steps/sec)\n","Step #14400\tEpoch   4 Batch 1899/3125   Loss: 0.655727 mse: 0.725324 (51.0509352574027 steps/sec)\n","Step #14450\tEpoch   4 Batch 1949/3125   Loss: 0.845624 mse: 0.739176 (50.62394254442068 steps/sec)\n","Step #14500\tEpoch   4 Batch 1999/3125   Loss: 0.694966 mse: 0.736264 (50.13852243374879 steps/sec)\n","Step #14550\tEpoch   4 Batch 2049/3125   Loss: 0.736888 mse: 0.716404 (52.87495890322542 steps/sec)\n","Step #14600\tEpoch   4 Batch 2099/3125   Loss: 0.736260 mse: 0.723310 (51.36811268323211 steps/sec)\n","Step #14650\tEpoch   4 Batch 2149/3125   Loss: 0.653923 mse: 0.715716 (52.73272506088843 steps/sec)\n","Step #14700\tEpoch   4 Batch 2199/3125   Loss: 0.765228 mse: 0.726142 (59.12873623107989 steps/sec)\n","Step #14750\tEpoch   4 Batch 2249/3125   Loss: 0.722523 mse: 0.724829 (62.59092112414339 steps/sec)\n","Step #14800\tEpoch   4 Batch 2299/3125   Loss: 0.605949 mse: 0.740814 (56.24725757499359 steps/sec)\n","Step #14850\tEpoch   4 Batch 2349/3125   Loss: 0.664821 mse: 0.716774 (51.531836847826725 steps/sec)\n","Step #14900\tEpoch   4 Batch 2399/3125   Loss: 0.679749 mse: 0.721871 (54.084279223832084 steps/sec)\n","Step #14950\tEpoch   4 Batch 2449/3125   Loss: 0.831516 mse: 0.721156 (50.810879960304 steps/sec)\n","Step #15000\tEpoch   4 Batch 2499/3125   Loss: 0.816046 mse: 0.720774 (51.203425229129095 steps/sec)\n","Step #15050\tEpoch   4 Batch 2549/3125   Loss: 0.655002 mse: 0.742470 (49.29433353696819 steps/sec)\n","Step #15100\tEpoch   4 Batch 2599/3125   Loss: 0.704728 mse: 0.722546 (53.08310231918629 steps/sec)\n","Step #15150\tEpoch   4 Batch 2649/3125   Loss: 0.637138 mse: 0.715614 (49.77257456979036 steps/sec)\n","Step #15200\tEpoch   4 Batch 2699/3125   Loss: 0.730929 mse: 0.743471 (48.31969328319693 steps/sec)\n","Step #15250\tEpoch   4 Batch 2749/3125   Loss: 0.707193 mse: 0.735602 (50.62768223377189 steps/sec)\n","Step #15300\tEpoch   4 Batch 2799/3125   Loss: 0.902831 mse: 0.725057 (50.374212194335726 steps/sec)\n","Step #15350\tEpoch   4 Batch 2849/3125   Loss: 0.737530 mse: 0.708629 (58.70561951494253 steps/sec)\n","Step #15400\tEpoch   4 Batch 2899/3125   Loss: 0.689198 mse: 0.738855 (61.93776429441844 steps/sec)\n","Step #15450\tEpoch   4 Batch 2949/3125   Loss: 0.648011 mse: 0.723857 (63.19044950252804 steps/sec)\n","Step #15500\tEpoch   4 Batch 2999/3125   Loss: 0.776897 mse: 0.726807 (61.828201404403785 steps/sec)\n","Step #15550\tEpoch   4 Batch 3049/3125   Loss: 0.776105 mse: 0.729166 (62.847388710945744 steps/sec)\n","Step #15600\tEpoch   4 Batch 3099/3125   Loss: 0.673441 mse: 0.731037 (63.240870242276095 steps/sec)\n","\n","Train time for epoch #5 (15625 total steps): 54.39093089103699\n","Model test set loss: 0.758675 mse: 0.757703\n","best loss = 0.7586748003959656\n","Step #15650\tEpoch   5 Batch   24/3125   Loss: 0.721040 mse: 0.755243 (118.03974786240839 steps/sec)\n","Step #15700\tEpoch   5 Batch   74/3125   Loss: 0.602270 mse: 0.676871 (62.77379603976044 steps/sec)\n","Step #15750\tEpoch   5 Batch  124/3125   Loss: 0.616509 mse: 0.673134 (61.171865314974355 steps/sec)\n","Step #15800\tEpoch   5 Batch  174/3125   Loss: 0.708575 mse: 0.692689 (60.02513030262266 steps/sec)\n","Step #15850\tEpoch   5 Batch  224/3125   Loss: 0.677299 mse: 0.699218 (63.81516426877595 steps/sec)\n","Step #15900\tEpoch   5 Batch  274/3125   Loss: 0.669247 mse: 0.670961 (58.93667618990342 steps/sec)\n","Step #15950\tEpoch   5 Batch  324/3125   Loss: 0.788945 mse: 0.679913 (54.17765469350638 steps/sec)\n","Step #16000\tEpoch   5 Batch  374/3125   Loss: 0.636570 mse: 0.681194 (61.4180538418938 steps/sec)\n","Step #16050\tEpoch   5 Batch  424/3125   Loss: 0.717288 mse: 0.693817 (60.924226446228175 steps/sec)\n","Step #16100\tEpoch   5 Batch  474/3125   Loss: 0.683809 mse: 0.695765 (61.47750488017446 steps/sec)\n","Step #16150\tEpoch   5 Batch  524/3125   Loss: 0.677944 mse: 0.689616 (61.40728143286155 steps/sec)\n","Step #16200\tEpoch   5 Batch  574/3125   Loss: 0.677823 mse: 0.699875 (58.331625048015106 steps/sec)\n","Step #16250\tEpoch   5 Batch  624/3125   Loss: 0.619961 mse: 0.711765 (59.16466785269545 steps/sec)\n","Step #16300\tEpoch   5 Batch  674/3125   Loss: 0.677964 mse: 0.693655 (61.9371057591722 steps/sec)\n","Step #16350\tEpoch   5 Batch  724/3125   Loss: 0.619000 mse: 0.674399 (61.00644317488614 steps/sec)\n","Step #16400\tEpoch   5 Batch  774/3125   Loss: 0.689985 mse: 0.696000 (57.156827020328315 steps/sec)\n","Step #16450\tEpoch   5 Batch  824/3125   Loss: 0.613068 mse: 0.683438 (49.58489550687482 steps/sec)\n","Step #16500\tEpoch   5 Batch  874/3125   Loss: 0.716761 mse: 0.708910 (40.8504060200992 steps/sec)\n","Step #16550\tEpoch   5 Batch  924/3125   Loss: 0.687529 mse: 0.709736 (40.19951468881946 steps/sec)\n","Step #16600\tEpoch   5 Batch  974/3125   Loss: 0.816409 mse: 0.686958 (48.24168690585019 steps/sec)\n","Step #16650\tEpoch   5 Batch 1024/3125   Loss: 0.689505 mse: 0.708024 (45.79550437351399 steps/sec)\n","Step #16700\tEpoch   5 Batch 1074/3125   Loss: 0.654339 mse: 0.700363 (47.80202960411072 steps/sec)\n","Step #16750\tEpoch   5 Batch 1124/3125   Loss: 0.705486 mse: 0.705144 (53.75986743782688 steps/sec)\n","Step #16800\tEpoch   5 Batch 1174/3125   Loss: 0.703701 mse: 0.711815 (57.24396170473646 steps/sec)\n","Step #16850\tEpoch   5 Batch 1224/3125   Loss: 0.716020 mse: 0.706765 (58.18690320781651 steps/sec)\n","Step #16900\tEpoch   5 Batch 1274/3125   Loss: 0.740530 mse: 0.691468 (57.74499159770766 steps/sec)\n","Step #16950\tEpoch   5 Batch 1324/3125   Loss: 0.827649 mse: 0.705112 (59.99380938513234 steps/sec)\n","Step #17000\tEpoch   5 Batch 1374/3125   Loss: 0.712868 mse: 0.705053 (58.92394192549036 steps/sec)\n","Step #17050\tEpoch   5 Batch 1424/3125   Loss: 0.659467 mse: 0.692327 (56.693650744303675 steps/sec)\n","Step #17100\tEpoch   5 Batch 1474/3125   Loss: 0.601566 mse: 0.702077 (58.207559162293784 steps/sec)\n","Step #17150\tEpoch   5 Batch 1524/3125   Loss: 0.762580 mse: 0.716496 (59.89083922202955 steps/sec)\n","Step #17200\tEpoch   5 Batch 1574/3125   Loss: 0.608895 mse: 0.704556 (58.75275567432881 steps/sec)\n","Step #17250\tEpoch   5 Batch 1624/3125   Loss: 0.631975 mse: 0.690457 (59.24317178003364 steps/sec)\n","Step #17300\tEpoch   5 Batch 1674/3125   Loss: 0.672053 mse: 0.704050 (59.41578430092069 steps/sec)\n","Step #17350\tEpoch   5 Batch 1724/3125   Loss: 0.701020 mse: 0.701747 (60.136546233107 steps/sec)\n","Step #17400\tEpoch   5 Batch 1774/3125   Loss: 0.727775 mse: 0.695058 (61.01549541602307 steps/sec)\n","Step #17450\tEpoch   5 Batch 1824/3125   Loss: 0.689750 mse: 0.722970 (60.8966637899894 steps/sec)\n","Step #17500\tEpoch   5 Batch 1874/3125   Loss: 0.670617 mse: 0.711460 (61.77693162640656 steps/sec)\n","Step #17550\tEpoch   5 Batch 1924/3125   Loss: 0.698250 mse: 0.698037 (59.61064591142392 steps/sec)\n","Step #17600\tEpoch   5 Batch 1974/3125   Loss: 0.628079 mse: 0.698630 (58.69991765253175 steps/sec)\n","Step #17650\tEpoch   5 Batch 2024/3125   Loss: 0.697654 mse: 0.706827 (56.25448467572056 steps/sec)\n","Step #17700\tEpoch   5 Batch 2074/3125   Loss: 0.930375 mse: 0.702804 (61.201606593535516 steps/sec)\n","Step #17750\tEpoch   5 Batch 2124/3125   Loss: 0.560093 mse: 0.714613 (58.33892710332474 steps/sec)\n","Step #17800\tEpoch   5 Batch 2174/3125   Loss: 0.712410 mse: 0.697706 (59.90916292368663 steps/sec)\n","Step #17850\tEpoch   5 Batch 2224/3125   Loss: 0.731953 mse: 0.701862 (59.37475580822523 steps/sec)\n","Step #17900\tEpoch   5 Batch 2274/3125   Loss: 0.616834 mse: 0.727009 (61.852381424277176 steps/sec)\n","Step #17950\tEpoch   5 Batch 2324/3125   Loss: 0.687226 mse: 0.705491 (60.46263682752445 steps/sec)\n","Step #18000\tEpoch   5 Batch 2374/3125   Loss: 0.693047 mse: 0.708553 (60.53840344925535 steps/sec)\n","Step #18050\tEpoch   5 Batch 2424/3125   Loss: 0.632061 mse: 0.710973 (61.06325047832324 steps/sec)\n","Step #18100\tEpoch   5 Batch 2474/3125   Loss: 0.737064 mse: 0.698860 (60.93226287823496 steps/sec)\n","Step #18150\tEpoch   5 Batch 2524/3125   Loss: 0.617009 mse: 0.712431 (59.59482435009549 steps/sec)\n","Step #18200\tEpoch   5 Batch 2574/3125   Loss: 0.726352 mse: 0.704454 (59.587678604459406 steps/sec)\n","Step #18250\tEpoch   5 Batch 2624/3125   Loss: 0.671232 mse: 0.702297 (59.530270097958095 steps/sec)\n","Step #18300\tEpoch   5 Batch 2674/3125   Loss: 0.692235 mse: 0.728818 (56.95329814995311 steps/sec)\n","Step #18350\tEpoch   5 Batch 2724/3125   Loss: 0.626236 mse: 0.713637 (59.44276377196381 steps/sec)\n","Step #18400\tEpoch   5 Batch 2774/3125   Loss: 0.580985 mse: 0.710928 (60.78239855408082 steps/sec)\n","Step #18450\tEpoch   5 Batch 2824/3125   Loss: 0.789451 mse: 0.724388 (59.983650848948834 steps/sec)\n","Step #18500\tEpoch   5 Batch 2874/3125   Loss: 0.645639 mse: 0.713681 (59.547139488363314 steps/sec)\n","Step #18550\tEpoch   5 Batch 2924/3125   Loss: 0.768932 mse: 0.710726 (59.23018763904458 steps/sec)\n","Step #18600\tEpoch   5 Batch 2974/3125   Loss: 0.570691 mse: 0.709232 (61.00796944295354 steps/sec)\n","Step #18650\tEpoch   5 Batch 3024/3125   Loss: 0.832290 mse: 0.710939 (60.4132229976499 steps/sec)\n","Step #18700\tEpoch   5 Batch 3074/3125   Loss: 0.652256 mse: 0.719703 (63.0879509243204 steps/sec)\n","Step #18750\tEpoch   5 Batch 3124/3125   Loss: 0.694449 mse: 0.707522 (60.14432444493135 steps/sec)\n","\n","Train time for epoch #6 (18750 total steps): 54.135252952575684\n","Model test set loss: 0.754954 mse: 0.754954\n","best loss = 0.7549538612365723\n","Step #18800\tEpoch   6 Batch   49/3125   Loss: 0.722005 mse: 0.749478 (63.757523724166695 steps/sec)\n","Step #18850\tEpoch   6 Batch   99/3125   Loss: 0.668273 mse: 0.661265 (62.64688240087753 steps/sec)\n","Step #18900\tEpoch   6 Batch  149/3125   Loss: 0.655256 mse: 0.671596 (62.65708324780977 steps/sec)\n","Step #18950\tEpoch   6 Batch  199/3125   Loss: 0.687302 mse: 0.663007 (61.38012440793839 steps/sec)\n","Step #19000\tEpoch   6 Batch  249/3125   Loss: 0.696402 mse: 0.677130 (62.427314807924155 steps/sec)\n","Step #19050\tEpoch   6 Batch  299/3125   Loss: 0.652840 mse: 0.660213 (59.35017261809248 steps/sec)\n","Step #19100\tEpoch   6 Batch  349/3125   Loss: 0.646110 mse: 0.651917 (57.13487075023791 steps/sec)\n","Step #19150\tEpoch   6 Batch  399/3125   Loss: 0.697583 mse: 0.654159 (63.23408181541328 steps/sec)\n","Step #19200\tEpoch   6 Batch  449/3125   Loss: 0.732788 mse: 0.667140 (60.54915284968932 steps/sec)\n","Step #19250\tEpoch   6 Batch  499/3125   Loss: 0.611954 mse: 0.656179 (57.966402929896695 steps/sec)\n","Step #19300\tEpoch   6 Batch  549/3125   Loss: 0.569547 mse: 0.688420 (61.67642428539792 steps/sec)\n","Step #19350\tEpoch   6 Batch  599/3125   Loss: 0.659729 mse: 0.669920 (61.394715401813485 steps/sec)\n","Step #19400\tEpoch   6 Batch  649/3125   Loss: 0.678518 mse: 0.656078 (63.192677292029956 steps/sec)\n","Step #19450\tEpoch   6 Batch  699/3125   Loss: 0.705831 mse: 0.691654 (64.10966023119991 steps/sec)\n","Step #19500\tEpoch   6 Batch  749/3125   Loss: 0.671467 mse: 0.663841 (61.224262201852596 steps/sec)\n","Step #19550\tEpoch   6 Batch  799/3125   Loss: 0.773686 mse: 0.683849 (62.87372979986797 steps/sec)\n","Step #19600\tEpoch   6 Batch  849/3125   Loss: 0.589712 mse: 0.665452 (63.50916455312867 steps/sec)\n","Step #19650\tEpoch   6 Batch  899/3125   Loss: 0.686876 mse: 0.677279 (62.19629233756882 steps/sec)\n","Step #19700\tEpoch   6 Batch  949/3125   Loss: 0.746681 mse: 0.683623 (61.40629250291417 steps/sec)\n","Step #19750\tEpoch   6 Batch  999/3125   Loss: 0.711762 mse: 0.669272 (64.47912666478295 steps/sec)\n","Step #19800\tEpoch   6 Batch 1049/3125   Loss: 0.697760 mse: 0.698095 (61.652091624184095 steps/sec)\n","Step #19850\tEpoch   6 Batch 1099/3125   Loss: 0.584286 mse: 0.685488 (61.78963641629584 steps/sec)\n","Step #19900\tEpoch   6 Batch 1149/3125   Loss: 0.673091 mse: 0.682257 (62.31605171292835 steps/sec)\n","Step #19950\tEpoch   6 Batch 1199/3125   Loss: 0.614120 mse: 0.680443 (62.61291601580227 steps/sec)\n","Step #20000\tEpoch   6 Batch 1249/3125   Loss: 0.857361 mse: 0.675108 (62.38361925488361 steps/sec)\n","Step #20050\tEpoch   6 Batch 1299/3125   Loss: 0.772486 mse: 0.673792 (60.37897512894742 steps/sec)\n","Step #20100\tEpoch   6 Batch 1349/3125   Loss: 0.621884 mse: 0.696835 (61.7961546542215 steps/sec)\n","Step #20150\tEpoch   6 Batch 1399/3125   Loss: 0.703452 mse: 0.702863 (61.47986585051244 steps/sec)\n","Step #20200\tEpoch   6 Batch 1449/3125   Loss: 0.732717 mse: 0.694815 (61.83596758461508 steps/sec)\n","Step #20250\tEpoch   6 Batch 1499/3125   Loss: 0.763420 mse: 0.688793 (63.122947787530975 steps/sec)\n","Step #20300\tEpoch   6 Batch 1549/3125   Loss: 0.723756 mse: 0.691293 (58.823866004625906 steps/sec)\n","Step #20350\tEpoch   6 Batch 1599/3125   Loss: 0.566805 mse: 0.691711 (61.412244544165 steps/sec)\n","Step #20400\tEpoch   6 Batch 1649/3125   Loss: 0.762171 mse: 0.684380 (63.583046719995345 steps/sec)\n","Step #20450\tEpoch   6 Batch 1699/3125   Loss: 0.793358 mse: 0.708704 (62.41936223167126 steps/sec)\n","Step #20500\tEpoch   6 Batch 1749/3125   Loss: 0.697433 mse: 0.695959 (64.06361786270912 steps/sec)\n","Step #20550\tEpoch   6 Batch 1799/3125   Loss: 0.716946 mse: 0.699351 (60.594744733161185 steps/sec)\n","Step #20600\tEpoch   6 Batch 1849/3125   Loss: 0.659580 mse: 0.683724 (61.04480049228175 steps/sec)\n","Step #20650\tEpoch   6 Batch 1899/3125   Loss: 0.681290 mse: 0.688041 (63.14583160826527 steps/sec)\n","Step #20700\tEpoch   6 Batch 1949/3125   Loss: 0.709588 mse: 0.696954 (62.621497653133105 steps/sec)\n","Step #20750\tEpoch   6 Batch 1999/3125   Loss: 0.744969 mse: 0.700869 (62.19857970925087 steps/sec)\n","Step #20800\tEpoch   6 Batch 2049/3125   Loss: 0.766492 mse: 0.685747 (62.779001302487536 steps/sec)\n","Step #20850\tEpoch   6 Batch 2099/3125   Loss: 0.662483 mse: 0.693114 (62.16443420533111 steps/sec)\n","Step #20900\tEpoch   6 Batch 2149/3125   Loss: 0.733462 mse: 0.704232 (63.191154000174166 steps/sec)\n","Step #20950\tEpoch   6 Batch 2199/3125   Loss: 0.719872 mse: 0.706177 (61.29940645897505 steps/sec)\n","Step #21000\tEpoch   6 Batch 2249/3125   Loss: 0.558653 mse: 0.667249 (63.44347556710787 steps/sec)\n","Step #21050\tEpoch   6 Batch 2299/3125   Loss: 0.652063 mse: 0.694103 (60.3934070269562 steps/sec)\n","Step #21100\tEpoch   6 Batch 2349/3125   Loss: 0.731316 mse: 0.694075 (59.1348051766415 steps/sec)\n","Step #21150\tEpoch   6 Batch 2399/3125   Loss: 0.596906 mse: 0.686150 (61.532485007495154 steps/sec)\n","Step #21200\tEpoch   6 Batch 2449/3125   Loss: 0.662243 mse: 0.693012 (61.0756100274398 steps/sec)\n","Step #21250\tEpoch   6 Batch 2499/3125   Loss: 0.695041 mse: 0.690395 (61.437144132753204 steps/sec)\n","Step #21300\tEpoch   6 Batch 2549/3125   Loss: 0.708041 mse: 0.706872 (63.68542107376102 steps/sec)\n","Step #21350\tEpoch   6 Batch 2599/3125   Loss: 0.589321 mse: 0.690613 (61.397447491714 steps/sec)\n","Step #21400\tEpoch   6 Batch 2649/3125   Loss: 0.708742 mse: 0.679849 (61.99276478333074 steps/sec)\n","Step #21450\tEpoch   6 Batch 2699/3125   Loss: 0.543687 mse: 0.685034 (63.31435851685468 steps/sec)\n","Step #21500\tEpoch   6 Batch 2749/3125   Loss: 0.735695 mse: 0.680763 (61.35160934641722 steps/sec)\n","Step #21550\tEpoch   6 Batch 2799/3125   Loss: 0.650592 mse: 0.689780 (60.425390424321456 steps/sec)\n","Step #21600\tEpoch   6 Batch 2849/3125   Loss: 0.680081 mse: 0.699931 (61.789072052562574 steps/sec)\n","Step #21650\tEpoch   6 Batch 2899/3125   Loss: 0.696547 mse: 0.710638 (62.17479189112106 steps/sec)\n","Step #21700\tEpoch   6 Batch 2949/3125   Loss: 0.775708 mse: 0.698828 (59.665323701462846 steps/sec)\n","Step #21750\tEpoch   6 Batch 2999/3125   Loss: 0.702108 mse: 0.699045 (62.2780410536075 steps/sec)\n","Step #21800\tEpoch   6 Batch 3049/3125   Loss: 0.765983 mse: 0.687487 (63.21620243152225 steps/sec)\n","Step #21850\tEpoch   6 Batch 3099/3125   Loss: 0.696155 mse: 0.695586 (59.68539510034645 steps/sec)\n","\n","Train time for epoch #7 (21875 total steps): 50.65467619895935\n","Model test set loss: 0.750703 mse: 0.748633\n","best loss = 0.7507027983665466\n","Step #21900\tEpoch   7 Batch   24/3125   Loss: 0.681324 mse: 0.745269 (121.2881405336754 steps/sec)\n","Step #21950\tEpoch   7 Batch   74/3125   Loss: 0.689295 mse: 0.636739 (60.20017619546961 steps/sec)\n","Step #22000\tEpoch   7 Batch  124/3125   Loss: 0.645230 mse: 0.638418 (63.688979780746 steps/sec)\n","Step #22050\tEpoch   7 Batch  174/3125   Loss: 0.634357 mse: 0.632730 (62.77777977342965 steps/sec)\n","Step #22100\tEpoch   7 Batch  224/3125   Loss: 0.700491 mse: 0.639303 (63.78876590003014 steps/sec)\n","Step #22150\tEpoch   7 Batch  274/3125   Loss: 0.715996 mse: 0.643403 (62.918718927321095 steps/sec)\n","Step #22200\tEpoch   7 Batch  324/3125   Loss: 0.501203 mse: 0.651761 (63.042416324547816 steps/sec)\n","Step #22250\tEpoch   7 Batch  374/3125   Loss: 0.668137 mse: 0.651580 (63.22817173178968 steps/sec)\n","Step #22300\tEpoch   7 Batch  424/3125   Loss: 0.783376 mse: 0.647856 (62.591743085038914 steps/sec)\n","Step #22350\tEpoch   7 Batch  474/3125   Loss: 0.663139 mse: 0.648340 (62.66273725778215 steps/sec)\n","Step #22400\tEpoch   7 Batch  524/3125   Loss: 0.618510 mse: 0.645753 (60.37838408982224 steps/sec)\n","Step #22450\tEpoch   7 Batch  574/3125   Loss: 0.582039 mse: 0.653322 (60.51653190666644 steps/sec)\n","Step #22500\tEpoch   7 Batch  624/3125   Loss: 0.671814 mse: 0.649010 (62.481773745971154 steps/sec)\n","Step #22550\tEpoch   7 Batch  674/3125   Loss: 0.718002 mse: 0.646009 (64.20074488283372 steps/sec)\n","Step #22600\tEpoch   7 Batch  724/3125   Loss: 0.672654 mse: 0.657057 (63.203647161753146 steps/sec)\n","Step #22650\tEpoch   7 Batch  774/3125   Loss: 0.683370 mse: 0.644910 (62.863119109632585 steps/sec)\n","Step #22700\tEpoch   7 Batch  824/3125   Loss: 0.644925 mse: 0.661472 (63.72937188422577 steps/sec)\n","Step #22750\tEpoch   7 Batch  874/3125   Loss: 0.643407 mse: 0.652801 (62.25711244119846 steps/sec)\n","Step #22800\tEpoch   7 Batch  924/3125   Loss: 0.579094 mse: 0.660384 (62.133750017035915 steps/sec)\n","Step #22850\tEpoch   7 Batch  974/3125   Loss: 0.715330 mse: 0.671845 (62.395925070811415 steps/sec)\n","Step #22900\tEpoch   7 Batch 1024/3125   Loss: 0.782173 mse: 0.688708 (63.68428005083441 steps/sec)\n","Step #22950\tEpoch   7 Batch 1074/3125   Loss: 0.603543 mse: 0.659184 (63.80631061654578 steps/sec)\n","Step #23000\tEpoch   7 Batch 1124/3125   Loss: 0.692689 mse: 0.672307 (61.03403426680213 steps/sec)\n","Step #23050\tEpoch   7 Batch 1174/3125   Loss: 0.811312 mse: 0.660922 (62.985330317144346 steps/sec)\n","Step #23100\tEpoch   7 Batch 1224/3125   Loss: 0.745707 mse: 0.659761 (61.64308507010988 steps/sec)\n","Step #23150\tEpoch   7 Batch 1274/3125   Loss: 0.534946 mse: 0.657758 (62.17506838910055 steps/sec)\n","Step #23200\tEpoch   7 Batch 1324/3125   Loss: 0.622926 mse: 0.659157 (63.36612602388401 steps/sec)\n","Step #23250\tEpoch   7 Batch 1374/3125   Loss: 0.769232 mse: 0.667737 (64.33384174960642 steps/sec)\n","Step #23300\tEpoch   7 Batch 1424/3125   Loss: 0.818317 mse: 0.669524 (61.27384853980423 steps/sec)\n","Step #23350\tEpoch   7 Batch 1474/3125   Loss: 0.556848 mse: 0.662963 (62.439489146826375 steps/sec)\n","Step #23400\tEpoch   7 Batch 1524/3125   Loss: 0.594946 mse: 0.650958 (61.13199385168069 steps/sec)\n","Step #23450\tEpoch   7 Batch 1574/3125   Loss: 0.576292 mse: 0.646009 (62.20186348852122 steps/sec)\n","Step #23500\tEpoch   7 Batch 1624/3125   Loss: 0.731241 mse: 0.649667 (63.56144388282871 steps/sec)\n","Step #23550\tEpoch   7 Batch 1674/3125   Loss: 0.667189 mse: 0.672165 (62.89403767550648 steps/sec)\n","Step #23600\tEpoch   7 Batch 1724/3125   Loss: 0.639703 mse: 0.676772 (62.764928410668965 steps/sec)\n","Step #23650\tEpoch   7 Batch 1774/3125   Loss: 0.578857 mse: 0.665122 (61.60245240475958 steps/sec)\n","Step #23700\tEpoch   7 Batch 1824/3125   Loss: 0.717135 mse: 0.663888 (60.9787351711308 steps/sec)\n","Step #23750\tEpoch   7 Batch 1874/3125   Loss: 0.715379 mse: 0.684829 (60.54604124858426 steps/sec)\n","Step #23800\tEpoch   7 Batch 1924/3125   Loss: 0.795274 mse: 0.684493 (62.073813645836694 steps/sec)\n","Step #23850\tEpoch   7 Batch 1974/3125   Loss: 0.582997 mse: 0.673324 (60.88828317938647 steps/sec)\n","Step #23900\tEpoch   7 Batch 2024/3125   Loss: 0.560135 mse: 0.678475 (63.02780836607216 steps/sec)\n","Step #23950\tEpoch   7 Batch 2074/3125   Loss: 0.669340 mse: 0.673685 (61.9077785603839 steps/sec)\n","Step #24000\tEpoch   7 Batch 2124/3125   Loss: 0.629643 mse: 0.687242 (63.58748087510893 steps/sec)\n","Step #24050\tEpoch   7 Batch 2174/3125   Loss: 0.605505 mse: 0.683064 (63.787349546373115 steps/sec)\n","Step #24100\tEpoch   7 Batch 2224/3125   Loss: 0.589883 mse: 0.685117 (62.64302753285608 steps/sec)\n","Step #24150\tEpoch   7 Batch 2274/3125   Loss: 0.684346 mse: 0.672762 (62.94717922827609 steps/sec)\n","Step #24200\tEpoch   7 Batch 2324/3125   Loss: 0.745981 mse: 0.673413 (62.868263810529925 steps/sec)\n","Step #24250\tEpoch   7 Batch 2374/3125   Loss: 0.593144 mse: 0.686031 (62.408997195518545 steps/sec)\n","Step #24300\tEpoch   7 Batch 2424/3125   Loss: 0.652127 mse: 0.678325 (62.00959201414556 steps/sec)\n","Step #24350\tEpoch   7 Batch 2474/3125   Loss: 0.688144 mse: 0.670835 (58.58730733869474 steps/sec)\n","Step #24400\tEpoch   7 Batch 2524/3125   Loss: 0.797203 mse: 0.682032 (63.76521991629331 steps/sec)\n","Step #24450\tEpoch   7 Batch 2574/3125   Loss: 0.633449 mse: 0.688432 (62.015789962391054 steps/sec)\n","Step #24500\tEpoch   7 Batch 2624/3125   Loss: 0.678852 mse: 0.680222 (63.17366045097362 steps/sec)\n","Step #24550\tEpoch   7 Batch 2674/3125   Loss: 0.683474 mse: 0.692687 (64.0521127113307 steps/sec)\n","Step #24600\tEpoch   7 Batch 2724/3125   Loss: 0.575400 mse: 0.681010 (59.699378340232755 steps/sec)\n","Step #24650\tEpoch   7 Batch 2774/3125   Loss: 0.583795 mse: 0.683797 (60.03739970158107 steps/sec)\n","Step #24700\tEpoch   7 Batch 2824/3125   Loss: 0.578571 mse: 0.679849 (61.359740979425936 steps/sec)\n","Step #24750\tEpoch   7 Batch 2874/3125   Loss: 0.763820 mse: 0.698925 (61.039221478893225 steps/sec)\n","Step #24800\tEpoch   7 Batch 2924/3125   Loss: 0.677579 mse: 0.686214 (62.47202069976699 steps/sec)\n","Step #24850\tEpoch   7 Batch 2974/3125   Loss: 0.699297 mse: 0.696503 (63.013623717846826 steps/sec)\n","Step #24900\tEpoch   7 Batch 3024/3125   Loss: 0.600050 mse: 0.689682 (59.4980791485554 steps/sec)\n","Step #24950\tEpoch   7 Batch 3074/3125   Loss: 0.684698 mse: 0.679098 (63.544168328633766 steps/sec)\n","Step #25000\tEpoch   7 Batch 3124/3125   Loss: 0.770770 mse: 0.684550 (63.06920569235766 steps/sec)\n","\n","Train time for epoch #8 (25000 total steps): 50.25305652618408\n","Model test set loss: 0.751653 mse: 0.751653\n","Step #25050\tEpoch   8 Batch   49/3125   Loss: 0.664211 mse: 0.744182 (62.404781579753156 steps/sec)\n","Step #25100\tEpoch   8 Batch   99/3125   Loss: 0.770592 mse: 0.617399 (61.17166904004485 steps/sec)\n","Step #25150\tEpoch   8 Batch  149/3125   Loss: 0.595223 mse: 0.628663 (62.02818957658847 steps/sec)\n","Step #25200\tEpoch   8 Batch  199/3125   Loss: 0.638878 mse: 0.625680 (63.522726584318264 steps/sec)\n","Step #25250\tEpoch   8 Batch  249/3125   Loss: 0.580837 mse: 0.631402 (64.11140452189565 steps/sec)\n","Step #25300\tEpoch   8 Batch  299/3125   Loss: 0.616468 mse: 0.615398 (63.265366457004085 steps/sec)\n","Step #25350\tEpoch   8 Batch  349/3125   Loss: 0.611789 mse: 0.631230 (61.997218161473754 steps/sec)\n","Step #25400\tEpoch   8 Batch  399/3125   Loss: 0.666803 mse: 0.636122 (57.876928953146546 steps/sec)\n","Step #25450\tEpoch   8 Batch  449/3125   Loss: 0.645439 mse: 0.635151 (59.22214233632915 steps/sec)\n","Step #25500\tEpoch   8 Batch  499/3125   Loss: 0.594674 mse: 0.650856 (62.40080790840928 steps/sec)\n","Step #25550\tEpoch   8 Batch  549/3125   Loss: 0.687189 mse: 0.631292 (63.10701114117613 steps/sec)\n","Step #25600\tEpoch   8 Batch  599/3125   Loss: 0.591982 mse: 0.634842 (64.03539065322052 steps/sec)\n","Step #25650\tEpoch   8 Batch  649/3125   Loss: 0.594368 mse: 0.633363 (62.961523000005705 steps/sec)\n","Step #25700\tEpoch   8 Batch  699/3125   Loss: 0.574324 mse: 0.632346 (61.57638809163147 steps/sec)\n","Step #25750\tEpoch   8 Batch  749/3125   Loss: 0.681278 mse: 0.638195 (61.17443484840662 steps/sec)\n","Step #25800\tEpoch   8 Batch  799/3125   Loss: 0.665095 mse: 0.646842 (61.93772770875961 steps/sec)\n","Step #25850\tEpoch   8 Batch  849/3125   Loss: 0.718425 mse: 0.642350 (60.31796798691221 steps/sec)\n","Step #25900\tEpoch   8 Batch  899/3125   Loss: 0.657870 mse: 0.659142 (63.79235557112986 steps/sec)\n","Step #25950\tEpoch   8 Batch  949/3125   Loss: 0.638664 mse: 0.651359 (60.03985762108807 steps/sec)\n","Step #26000\tEpoch   8 Batch  999/3125   Loss: 0.574828 mse: 0.639217 (57.303023861140545 steps/sec)\n","Step #26050\tEpoch   8 Batch 1049/3125   Loss: 0.660322 mse: 0.644795 (61.40273261882559 steps/sec)\n","Step #26100\tEpoch   8 Batch 1099/3125   Loss: 0.701717 mse: 0.655391 (62.975097961670556 steps/sec)\n","Step #26150\tEpoch   8 Batch 1149/3125   Loss: 0.732537 mse: 0.662825 (61.1258287604015 steps/sec)\n","Step #26200\tEpoch   8 Batch 1199/3125   Loss: 0.638285 mse: 0.660245 (61.86617578514493 steps/sec)\n","Step #26250\tEpoch   8 Batch 1249/3125   Loss: 0.586362 mse: 0.640082 (60.65078754993495 steps/sec)\n","Step #26300\tEpoch   8 Batch 1299/3125   Loss: 0.724106 mse: 0.666066 (60.5442583403992 steps/sec)\n","Step #26350\tEpoch   8 Batch 1349/3125   Loss: 0.783806 mse: 0.655264 (54.37267759676183 steps/sec)\n","Step #26400\tEpoch   8 Batch 1399/3125   Loss: 0.602086 mse: 0.644368 (62.156327393393475 steps/sec)\n","Step #26450\tEpoch   8 Batch 1449/3125   Loss: 0.688026 mse: 0.658621 (58.903667884913325 steps/sec)\n","Step #26500\tEpoch   8 Batch 1499/3125   Loss: 0.642247 mse: 0.647070 (60.90237594980637 steps/sec)\n","Step #26550\tEpoch   8 Batch 1549/3125   Loss: 0.568433 mse: 0.649647 (59.64843818884402 steps/sec)\n","Step #26600\tEpoch   8 Batch 1599/3125   Loss: 0.710775 mse: 0.640999 (59.772697799230166 steps/sec)\n","Step #26650\tEpoch   8 Batch 1649/3125   Loss: 0.677140 mse: 0.649604 (61.127895531049816 steps/sec)\n","Step #26700\tEpoch   8 Batch 1699/3125   Loss: 0.603300 mse: 0.652445 (61.389251951389795 steps/sec)\n","Step #26750\tEpoch   8 Batch 1749/3125   Loss: 0.570782 mse: 0.658566 (57.80455098601022 steps/sec)\n","Step #26800\tEpoch   8 Batch 1799/3125   Loss: 0.572126 mse: 0.660385 (60.80314054307157 steps/sec)\n","Step #26850\tEpoch   8 Batch 1849/3125   Loss: 0.611384 mse: 0.651137 (61.21187815486854 steps/sec)\n","Step #26900\tEpoch   8 Batch 1899/3125   Loss: 0.662157 mse: 0.684868 (58.942556673643516 steps/sec)\n","Step #26950\tEpoch   8 Batch 1949/3125   Loss: 0.600379 mse: 0.655177 (57.819978125395465 steps/sec)\n","Step #27000\tEpoch   8 Batch 1999/3125   Loss: 0.604167 mse: 0.663648 (60.22315123731371 steps/sec)\n","Step #27050\tEpoch   8 Batch 2049/3125   Loss: 0.590115 mse: 0.651971 (58.06465724538749 steps/sec)\n","Step #27100\tEpoch   8 Batch 2099/3125   Loss: 0.665282 mse: 0.658067 (61.46536046366787 steps/sec)\n","Step #27150\tEpoch   8 Batch 2149/3125   Loss: 0.766633 mse: 0.666157 (61.47372049687802 steps/sec)\n","Step #27200\tEpoch   8 Batch 2199/3125   Loss: 0.588840 mse: 0.649848 (59.2765617902768 steps/sec)\n","Step #27250\tEpoch   8 Batch 2249/3125   Loss: 0.677750 mse: 0.652085 (57.08274165657516 steps/sec)\n","Step #27300\tEpoch   8 Batch 2299/3125   Loss: 0.629924 mse: 0.668642 (59.04418420337657 steps/sec)\n","Step #27350\tEpoch   8 Batch 2349/3125   Loss: 0.679469 mse: 0.661107 (58.47574784698254 steps/sec)\n","Step #27400\tEpoch   8 Batch 2399/3125   Loss: 0.626878 mse: 0.665851 (61.04655969204723 steps/sec)\n","Step #27450\tEpoch   8 Batch 2449/3125   Loss: 0.589164 mse: 0.643100 (60.14608387605241 steps/sec)\n","Step #27500\tEpoch   8 Batch 2499/3125   Loss: 0.682159 mse: 0.673712 (63.27200888700625 steps/sec)\n","Step #27550\tEpoch   8 Batch 2549/3125   Loss: 0.566714 mse: 0.658428 (60.50890155017937 steps/sec)\n","Step #27600\tEpoch   8 Batch 2599/3125   Loss: 0.562811 mse: 0.667699 (63.50922225163092 steps/sec)\n","Step #27650\tEpoch   8 Batch 2649/3125   Loss: 0.651290 mse: 0.678715 (58.19880402772027 steps/sec)\n","Step #27700\tEpoch   8 Batch 2699/3125   Loss: 0.659562 mse: 0.658157 (63.69232610172601 steps/sec)\n","Step #27750\tEpoch   8 Batch 2749/3125   Loss: 0.583542 mse: 0.673929 (62.72342291335613 steps/sec)\n","Step #27800\tEpoch   8 Batch 2799/3125   Loss: 0.661095 mse: 0.649829 (61.3971958416881 steps/sec)\n","Step #27850\tEpoch   8 Batch 2849/3125   Loss: 0.615791 mse: 0.660944 (62.50879664831678 steps/sec)\n","Step #27900\tEpoch   8 Batch 2899/3125   Loss: 0.666003 mse: 0.665725 (61.263753037039244 steps/sec)\n","Step #27950\tEpoch   8 Batch 2949/3125   Loss: 0.602943 mse: 0.665753 (60.62415516808758 steps/sec)\n","Step #28000\tEpoch   8 Batch 2999/3125   Loss: 0.735967 mse: 0.669911 (62.12193382197861 steps/sec)\n","Step #28050\tEpoch   8 Batch 3049/3125   Loss: 0.596949 mse: 0.668032 (60.75142648321085 steps/sec)\n","Step #28100\tEpoch   8 Batch 3099/3125   Loss: 0.707898 mse: 0.662113 (63.63930991705944 steps/sec)\n","\n","Train time for epoch #9 (28125 total steps): 51.42930197715759\n","Model test set loss: 0.755367 mse: 0.752416\n","Step #28150\tEpoch   9 Batch   24/3125   Loss: 0.698720 mse: 0.747966 (110.95484618498013 steps/sec)\n","Step #28200\tEpoch   9 Batch   74/3125   Loss: 0.544823 mse: 0.620301 (54.38194100674241 steps/sec)\n","Step #28250\tEpoch   9 Batch  124/3125   Loss: 0.614331 mse: 0.610836 (55.141673855774876 steps/sec)\n","Step #28300\tEpoch   9 Batch  174/3125   Loss: 0.522392 mse: 0.617590 (54.226573594374294 steps/sec)\n","Step #28350\tEpoch   9 Batch  224/3125   Loss: 0.573796 mse: 0.611604 (55.0390113536962 steps/sec)\n","Step #28400\tEpoch   9 Batch  274/3125   Loss: 0.562692 mse: 0.613700 (56.30668352433349 steps/sec)\n","Step #28450\tEpoch   9 Batch  324/3125   Loss: 0.657081 mse: 0.610481 (53.754520870980556 steps/sec)\n","Step #28500\tEpoch   9 Batch  374/3125   Loss: 0.647443 mse: 0.611868 (50.054478333853254 steps/sec)\n","Step #28550\tEpoch   9 Batch  424/3125   Loss: 0.520266 mse: 0.594633 (53.48979686573019 steps/sec)\n","Step #28600\tEpoch   9 Batch  474/3125   Loss: 0.579683 mse: 0.634552 (53.49032895060704 steps/sec)\n","Step #28650\tEpoch   9 Batch  524/3125   Loss: 0.551783 mse: 0.623122 (52.058197690640334 steps/sec)\n","Step #28700\tEpoch   9 Batch  574/3125   Loss: 0.533427 mse: 0.621611 (61.56393348876342 steps/sec)\n","Step #28750\tEpoch   9 Batch  624/3125   Loss: 0.615588 mse: 0.637424 (57.92143142014051 steps/sec)\n","Step #28800\tEpoch   9 Batch  674/3125   Loss: 0.618129 mse: 0.600566 (51.582270463850136 steps/sec)\n","Step #28850\tEpoch   9 Batch  724/3125   Loss: 0.543019 mse: 0.625340 (54.52433371777526 steps/sec)\n","Step #28900\tEpoch   9 Batch  774/3125   Loss: 0.681227 mse: 0.633404 (53.5925214079833 steps/sec)\n","Step #28950\tEpoch   9 Batch  824/3125   Loss: 0.655978 mse: 0.624523 (54.40826800447169 steps/sec)\n","Step #29000\tEpoch   9 Batch  874/3125   Loss: 0.589728 mse: 0.625501 (49.3794347323944 steps/sec)\n","Step #29050\tEpoch   9 Batch  924/3125   Loss: 0.572840 mse: 0.643828 (51.61084551485778 steps/sec)\n","Step #29100\tEpoch   9 Batch  974/3125   Loss: 0.597170 mse: 0.623206 (54.797532957138216 steps/sec)\n","Step #29150\tEpoch   9 Batch 1024/3125   Loss: 0.548684 mse: 0.643514 (51.37265526669956 steps/sec)\n","Step #29200\tEpoch   9 Batch 1074/3125   Loss: 0.783582 mse: 0.633313 (49.094544041426516 steps/sec)\n","Step #29250\tEpoch   9 Batch 1124/3125   Loss: 0.728835 mse: 0.630967 (54.06797891682127 steps/sec)\n","Step #29300\tEpoch   9 Batch 1174/3125   Loss: 0.625843 mse: 0.654328 (54.15318637545709 steps/sec)\n","Step #29350\tEpoch   9 Batch 1224/3125   Loss: 0.619939 mse: 0.630134 (59.69570774280046 steps/sec)\n","Step #29400\tEpoch   9 Batch 1274/3125   Loss: 0.568472 mse: 0.631616 (61.48410163344704 steps/sec)\n","Step #29450\tEpoch   9 Batch 1324/3125   Loss: 0.664436 mse: 0.648057 (59.70631292267554 steps/sec)\n","Step #29500\tEpoch   9 Batch 1374/3125   Loss: 0.590349 mse: 0.633197 (62.05417881078842 steps/sec)\n","Step #29550\tEpoch   9 Batch 1424/3125   Loss: 0.689591 mse: 0.646124 (58.27936329199791 steps/sec)\n","Step #29600\tEpoch   9 Batch 1474/3125   Loss: 0.631671 mse: 0.634844 (58.82391550390098 steps/sec)\n","Step #29650\tEpoch   9 Batch 1524/3125   Loss: 0.633807 mse: 0.646694 (61.21236055641126 steps/sec)\n","Step #29700\tEpoch   9 Batch 1574/3125   Loss: 0.611254 mse: 0.630434 (60.54065788520279 steps/sec)\n","Step #29750\tEpoch   9 Batch 1624/3125   Loss: 0.692111 mse: 0.646737 (61.79103826759562 steps/sec)\n","Step #29800\tEpoch   9 Batch 1674/3125   Loss: 0.682608 mse: 0.639968 (62.84859411561625 steps/sec)\n","Step #29850\tEpoch   9 Batch 1724/3125   Loss: 0.596497 mse: 0.644857 (62.11819848362014 steps/sec)\n","Step #29900\tEpoch   9 Batch 1774/3125   Loss: 0.609818 mse: 0.642275 (64.03883214094972 steps/sec)\n","Step #29950\tEpoch   9 Batch 1824/3125   Loss: 0.595017 mse: 0.626476 (61.748719476790406 steps/sec)\n","Step #30000\tEpoch   9 Batch 1874/3125   Loss: 0.659592 mse: 0.648884 (63.47077983197957 steps/sec)\n","Step #30050\tEpoch   9 Batch 1924/3125   Loss: 0.593848 mse: 0.647240 (61.82056474018821 steps/sec)\n","Step #30100\tEpoch   9 Batch 1974/3125   Loss: 0.741729 mse: 0.650212 (61.22008001529661 steps/sec)\n","Step #30150\tEpoch   9 Batch 2024/3125   Loss: 0.537152 mse: 0.630424 (63.4377565533985 steps/sec)\n","Step #30200\tEpoch   9 Batch 2074/3125   Loss: 0.708405 mse: 0.646392 (59.661487560044776 steps/sec)\n","Step #30250\tEpoch   9 Batch 2124/3125   Loss: 0.665986 mse: 0.647650 (62.073960632510605 steps/sec)\n","Step #30300\tEpoch   9 Batch 2174/3125   Loss: 0.601769 mse: 0.657825 (63.35286042959612 steps/sec)\n","Step #30350\tEpoch   9 Batch 2224/3125   Loss: 0.591285 mse: 0.651186 (60.63814345649955 steps/sec)\n","Step #30400\tEpoch   9 Batch 2274/3125   Loss: 0.684431 mse: 0.649440 (59.6573803802605 steps/sec)\n","Step #30450\tEpoch   9 Batch 2324/3125   Loss: 0.697565 mse: 0.653465 (60.77570492679333 steps/sec)\n","Step #30500\tEpoch   9 Batch 2374/3125   Loss: 0.644052 mse: 0.648215 (62.28109277725328 steps/sec)\n","Step #30550\tEpoch   9 Batch 2424/3125   Loss: 0.672141 mse: 0.655779 (58.6190935131787 steps/sec)\n","Step #30600\tEpoch   9 Batch 2474/3125   Loss: 0.602204 mse: 0.652437 (58.98285711714266 steps/sec)\n","Step #30650\tEpoch   9 Batch 2524/3125   Loss: 0.570686 mse: 0.640456 (54.3310805401833 steps/sec)\n","Step #30700\tEpoch   9 Batch 2574/3125   Loss: 0.720555 mse: 0.648217 (52.272231598305176 steps/sec)\n","Step #30750\tEpoch   9 Batch 2624/3125   Loss: 0.696214 mse: 0.644280 (49.857949615025625 steps/sec)\n","Step #30800\tEpoch   9 Batch 2674/3125   Loss: 0.644789 mse: 0.651237 (53.42330146848661 steps/sec)\n","Step #30850\tEpoch   9 Batch 2724/3125   Loss: 0.685811 mse: 0.657517 (53.5401735372427 steps/sec)\n","Step #30900\tEpoch   9 Batch 2774/3125   Loss: 0.616215 mse: 0.653490 (50.93144109745536 steps/sec)\n","Step #30950\tEpoch   9 Batch 2824/3125   Loss: 0.672047 mse: 0.656073 (53.95080619352555 steps/sec)\n","Step #31000\tEpoch   9 Batch 2874/3125   Loss: 0.615355 mse: 0.647583 (61.92293235358296 steps/sec)\n","Step #31050\tEpoch   9 Batch 2924/3125   Loss: 0.663263 mse: 0.647875 (62.30140823061674 steps/sec)\n","Step #31100\tEpoch   9 Batch 2974/3125   Loss: 0.637257 mse: 0.644513 (61.81356763998049 steps/sec)\n","Step #31150\tEpoch   9 Batch 3024/3125   Loss: 0.575441 mse: 0.642550 (62.32751582668322 steps/sec)\n","Step #31200\tEpoch   9 Batch 3074/3125   Loss: 0.599051 mse: 0.649008 (61.69961438329424 steps/sec)\n","Step #31250\tEpoch   9 Batch 3124/3125   Loss: 0.680983 mse: 0.663977 (62.07690051217871 steps/sec)\n","\n","Train time for epoch #10 (31250 total steps): 54.763755083084106\n","Model test set loss: 0.758222 mse: 0.758222\n","WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow/python/training/tracking/tracking.py:111: Model.state_updates (from tensorflow.python.keras.engine.training) is deprecated and will be removed in a future version.\n","Instructions for updating:\n","This property should not be used in TensorFlow 2.0, as updates are applied automatically.\n"],"name":"stdout"},{"output_type":"stream","text":["WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow/python/training/tracking/tracking.py:111: Model.state_updates (from tensorflow.python.keras.engine.training) is deprecated and will be removed in a future version.\n","Instructions for updating:\n","This property should not be used in TensorFlow 2.0, as updates are applied automatically.\n"],"name":"stderr"},{"output_type":"stream","text":["WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow/python/training/tracking/tracking.py:111: Layer.updates (from tensorflow.python.keras.engine.base_layer) is deprecated and will be removed in a future version.\n","Instructions for updating:\n","This property should not be used in TensorFlow 2.0, as updates are applied automatically.\n"],"name":"stdout"},{"output_type":"stream","text":["WARNING:tensorflow:From /usr/local/lib/python3.6/dist-packages/tensorflow/python/training/tracking/tracking.py:111: Layer.updates (from tensorflow.python.keras.engine.base_layer) is deprecated and will be removed in a future version.\n","Instructions for updating:\n","This property should not be used in TensorFlow 2.0, as updates are applied automatically.\n"],"name":"stderr"},{"output_type":"stream","text":["INFO:tensorflow:Assets written to: ./models/export/assets\n"],"name":"stdout"},{"output_type":"stream","text":["INFO:tensorflow:Assets written to: ./models/export/assets\n"],"name":"stderr"}]},{"cell_type":"markdown","metadata":{"id":"_u8qVrowy8Zw"},"source":["### 2.4 可视化模型的训练结果"]},{"cell_type":"markdown","metadata":{"id":"Ih2l07ry8nII"},"source":["#### 2.4.1 显示训练Loss"]},{"cell_type":"code","metadata":{"id":"pmGw3DPl8nII","executionInfo":{"status":"ok","timestamp":1605510813580,"user_tz":-480,"elapsed":1678,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}},"outputId":"a171f91b-0d81-4b41-e457-77f35c892ddf","colab":{"base_uri":"https://localhost:8080/","height":496}},"source":["%matplotlib inline\n","%config InlineBackend.figure_format = 'retina'\n","\n","plt.figure(figsize=(12,8))\n","plt.plot(mv_net.losses['train'], label='Training loss')\n","plt.xlabel('Step')\n","plt.ylabel('Training loss')\n","plt.legend()\n","_ = plt.ylim()"],"execution_count":38,"outputs":[{"output_type":"display_data","data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAABZoAAAO+CAYAAACNfaDoAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAWJQAAFiUBSVIk8AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdbbhddX0m/vsX8kCSBmIuCKHIMzVgq/JgmUlQQlGKwohMCWitU5XqwFBbwaJVwZK/dhSwHRGmKB2VwNgioGOCD0VoIShQEYKoQNoBFGgkgaHREAkEML//i3NCdnYSyN5rn+yccz6f6zrXyVlr7bW+iZ43t1/vVWqtAQAAAACAbo3p9wAAAAAAAAxvgmYAAAAAABoRNAMAAAAA0IigGQAAAACARgTNAAAAAAA0ImgGAAAAAKARQTMAAAAAAI0ImgEAAAAAaETQDAAAAABAI4JmAAAAAAAaETQDAAAAANCIoBkAAAAAgEbG9nuA4a6U8tMkOyR5sM+jAAAAAAA0sVeSJ2qte3f6QUFzcztMnDhx2gEHHDCt34MAAAAAAHRryZIleeqpp7r6rKC5uQcPOOCAaYsXL+73HAAAAAAAXTvkkENy5513PtjNZ3U0AwAAAADQiKAZAAAAAIBGBM0AAAAAADQiaAYAAAAAoBFBMwAAAAAAjQiaAQAAAABoRNAMAAAAAEAjY/s9AAAAAAAMhbVr12bFihVZtWpV1qxZk1prv0eCraaUkgkTJmTKlCmZNm1axowZ2p1jQTMAAAAAI87atWvzb//2b1m9enW/R4G+qLXm6aefztNPP50nn3wyu++++5CGzYJmAAAAAEacFStWZPXq1Rk7dmxmzJiRyZMnD/lGJ2xL1q5dmyeffDLLly/P6tWrs2LFiuy0005D9jy/XQAAAACMOKtWrUqSzJgxI1OmTBEyM+qMGTMmU6ZMyYwZM5Ks/50YsucN6d0BAAAAoA/WrFmTJJk8eXKfJ4H+Wvc7sO53YqgImgEAAAAYcda9+M8mM6NdKSVJhvxlmH7TAAAAAABGqHVB81ATNAMAAAAA0IigGQAAAACARgTNAAAAAEDPlVJyxBFHNL7PEUccsdXqH7bU/PnzU0rJ/Pnz+z3KNkPQDAAAAAAjUCmloy+hKU2M7fcAAAAAAEDvnXPOORsdu+CCC7Jy5cq8733vy9SpUzc4d+CBB/b0+UuWLMmkSZMa3+fyyy/P6tWrezARQ0nQDAAAAAAj0Lx58zY6Nn/+/KxcuTKnn3569tprryF9/v7779+T++yxxx49uQ9DS3UGAAAAAIxy63qQn3nmmXzsYx/LzJkzM2HChLzzne9MkqxcuTKf+tSncuSRR+alL31pxo8fn5133jnHHXdc/vmf/3mT99xUR/O8efNSSsmiRYvyla98JYceemgmTZqUadOm5a1vfWt+9rOfbXa2VosWLUopJfPmzctdd92VY489NlOnTs2kSZMyZ86c3HrrrZucadmyZXnXu96V6dOnZ+LEiTnwwANz2WWXbXC/phYvXpwTTjgh06dPz4QJE7LnnnvmtNNOy7Jlyza69tFHH82ZZ56ZmTNnZvLkyZk6dWpmzpyZd77znfnJT37y/HW11lx22WWZPXt2dt5552y//fbZfffdc/TRR+fKK69sPHMv2GgGAAAAAJIkJ5xwQm6//fa88Y1vzPHHH5/p06cnGajBOOuss3L44Yfn2GOPzUte8pI8/PDDueaaa/IP//AP+frXv543vOENW/yciy++ONdcc02OO+64zJkzJ7fddluuvPLK/PCHP8xdd92VCRMmbNF97rjjjpx//vmZNWtW3v3ud+fhhx/OV7/61bzuda/LXXfdlZkzZz5/7WOPPZZZs2bloYceyuGHH57Zs2dn+fLlOe200/K7v/u7nf1DbcY3vvGNnHDCCam1Zu7cudlzzz2zePHifPazn83ChQtz8803Z++9906SrF69OocddlgeeOCBHHXUUXnTm96UWmseeuihLFy4MHPnzs0+++yTJDnrrLPyyU9+MnvvvXdOOumk7Ljjjlm2bFluv/32XH311XnLW97Sk/mbEDQDAAAAAEmShx56KHfffXd22mmnDY4fcMABeeSRRzY6vnTp0hx66KE544wzOgqar7322tx+++15xSte8fyxt73tbbniiiuycOHCnHTSSVt0n29+85u59NJLn9+8TpJLLrkkp556aj7zmc/k4osvfv74hz/84Tz00EP54Ac/mPPOO+/546effnoOPfTQLZ59c375y1/mHe94R5577rksWrQor33ta58/d9555+VDH/pQTjnllFx33XVJkn/6p3/KAw88kNNPPz2f/vSnN7jXM888kzVr1mzwd9ptt91y9913b9R7/fjjjzeevReGXdBcSpmbZE6SA5O8KsmUJH9Xa337Fn7+80n+aPDH36i13j8kgwIAAACwzdrrQ9/s9whb7MFzj91qz/r4xz++UZicJDvuuOMmr3/pS1+auXPn5qKLLsrDDz+8xX3Kf/qnf7pByJwk73nPe3LFFVfk+9///hYHzYcddtgGIXOSnHzyyXnve9+b73//+88fe+aZZ3LFFVdkxx13zNlnn73B9a961avyh3/4h/n85z+/Rc/cnIULF2bFihX5/d///Q1C5iT5sz/7s3zuc5/L9ddfv9G/08SJEze61/jx4zN+/PgNjo0bNy7bbbfdRtdu6j+vfhiOHc1nJ3lvBoLmjUtbXkAp5U0ZCJl/OQRzAQAAAMCw9kKbvbfccktOOumk7L777pkwYUJKKSml5KKLLkqSTfYrb86rX/3qjY7tvvvuSZKf//znje4zbty47LLLLhvc51//9V/z1FNP5ZWvfGWmTJmy0Wde85rXbPEzN+fOO+9Mkhx55JEbnRs7dmwOP/zwJMkPfvCDJMmcOXOy22675dxzz80b3vCGXHjhhVm8eHF+9atfbfT5P/iDP8iDDz6Yl7/85fnwhz+ca6+9NitXrmw8cy8Nu43mJGckWZrk/gxsNt+4JR8qpeyc5H8luTLJjMHPAgAAAACDZsyYscnjX/va1zJ37txsv/32Oeqoo7Lvvvtm8uTJGTNmTBYtWpSbbrppg6qHFzN16tSNjo0dOxBVbipo7eQ+6+7Vep91oewuu+yyyes3d7wT656x6667bvL8uuO/+MUvkiQ77LBDvve97+Wcc87JNddck29/+9tJBjaUTzvttJx99tkZN25ckuTTn/509tlnn1x66aU599xzc+6552bs2LE55phj8td//dfZb7/9Gs/f1LALmmutzwfL7W+bfBF/O/j9j5N8tZczAQAAADC8bM06iuFkc3nbRz/60YwfPz533HFHDjjggA3OnXLKKbnpppu2xnhd22GHHZIkjz766CbPb+54J9bViyxfvnyT55ctW7bBdclA9cgXvvCF1Fpz77335oYbbsjf/M3f5GMf+1jWrl2bj3/840mS7bbbLqeffnpOP/30PPbYY7n55pvz5S9/OVdffXXuueee3HPPPVv8AsWhMhyrMzpWSnlnkuOTnFJr/fc+jwMAAAAAw8r999+fl7/85RuFzGvXrs3NN9/cp6m23P7775+JEyfmRz/6UVatWrXR+V78HQ466KAkyaJFizY699xzz+W73/1ukuTggw/e6HwpJb/5m7+ZP/mTP8n111+fJFmwYMEmnzN9+vT83u/9Xq666qoceeSReeCBB3L33Xc3nr+pER80l1L2TPKZJF+qtS5scJ/Fm/pKsn/PhgUAAACAbdBee+2V++67L4888sjzx2qtmTdvXu69994+TrZlxo8fn7e85S1ZuXJl/vIv/3KDcz/84Q9z+eWXN37G8ccfn2nTpuWKK67I9773vQ3OXXDBBfnpT3+a17/+9c+/CPCee+7Z5Cb1umOTJk1KkqxZsya33HLLRtc9++yzWbFixQbX9tOwq87oRCllTJLLMvDyvz/t8zgAAAAAMCydccYZOfXUU3PQQQflhBNOyLhx43LLLbfk3nvvzZve9KZ8/etf7/eIL+rcc8/NDTfckPPPPz+33XZbZs+enWXLluWqq67KMccckwULFmTMmO73cn/t134tX/ziF3PiiSdmzpw5OfHEE7PHHntk8eLFue666zJjxoxccsklz19//fXX5wMf+EBmzZqVl73sZZk+fXqWLl2ahQsXZsyYMfnABz6QJHnqqafymte8Jvvtt18OOeSQ7Lnnnnn66adz/fXXZ8mSJTnuuOM22jTvhxEdNGfgxYFzkhxba93y11VuQq31kE0dH9xq3njfHQAAAABGiFNOOSUTJkzIBRdckMsuuywTJ07Ma1/72lx66aX56le/OiyC5l122SW33nprPvKRj+Rb3/pWbrvttsycOTMXX3xxJk+enAULFjzf5dytN7/5zbnlllvyiU98It/+9rezcuXKzJgxI6eeemo++tGP5td//defv/boo4/Oww8/nO985ztZuHBhnnjiiey666456qij8v73vz+zZ89OkkyePDnnnXdebrzxxtx6661ZsGBBpkyZkn333Tef/exnc/LJJzeauVdKrbXfM3StlHJEkhuT/F2t9e1t516W5EdJ/r7WenLbuUUZCKB/o9Z6f8MZFh988MEHL168uMltAAAAAOihJUuWJMk2senJtu+ss87KJz7xiVx77bU5+uij+z1Oz23p78MhhxySO++8887NLd2+kJHc0fzyJBOSvKuUUlu/MhAyJ8l9g8eO79+YAAAAAMDW0Noxvc6Pf/zjXHjhhZk2bVrmzJmziU+xJUZydcaDSb6wmXPH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MpsfBbKBS40xDY5z0UREREREREREREROCid9oBkYbn/8y7KsEucNlmVlAvOAAKDf8S6YiIiIiIiIiIiIyMngVMjRHGt/3FzO9i3Yejy3B6aXdxJjzLJyNnU48qKJiIiIiIiIiIiInPhOhR7NIfbHQ+VsL10fehzKIiIiIiIiIiIiInLSORV6NB8VlmXFe1pv7+nc8zgXR0RERERERERERKTOOBV6NJf2WA4pZ3vp+vTjUBYRERERERERERGRk86pEGjeZH9sX872dvbH8nI4i4iIiIiIiIiIiEgFToVA80z742hjjMv7NcYEAQOBHGDh8S6YiIiIiIiIiIiIyMngpA80W5a1DfgLaAncVGbz40AD4BPLsrKPc9FERERERERERERETgqnymSANwLzgdeMMSOBDUBfYDi2lBkP1mLZRERERERERERERE5oJ32PZnD0au4FfIgtwHwn0AZ4FehnWVZK7ZVORERERERERERE5MR2qvRoxrKs3cAVtV0OERERERERERERkZPNKdGjWURERERERERERESOHQWaRURERERERERERKRGFGgWERERERERERERkRpRoFlEREREREREREREasRYllXbZTihGWNS6tev37Bjx461XRQRERERERERERGRI7ZhwwZyc3NTLctqVN1jFWiuIWPMDiAYSKjlohxPHeyPG2u1FCK1T9eCiK4DkVK6FkRsdC2I2OhaELHRtXDiaQlkWJbVqroHKtAs1WaMWQZgWVZ8bZdFpDbpWhDRdSBSSteCiI2uBREbXQsiNroWTi3K0SwiIiIiIiIiIiIiNaJAs4iIiIiIiIiIiIjUiALNIiIiIiIiIiIiIlIjCjSLiIiIiIiIiIiISI0o0CwiIiIiIiIiIiIiNWIsy6rtMoiIiIiIiIiIiIjICUw9mkVERERERERERESkRhRoFhEREREREREREZEaUaBZRERERERERERERGpEgWYRERERERERERERqREFmkVERERERERERESkRhRoFhEREREREREREZEaUaBZRERERERERERERGpEgWapMmNMc2PMB8aYfcaYfGNMgjHmFWNMWG2XTaQi9rpqlbMcKOeYAcaY340xqcaYXGPMamPM7cYY7wpe5wxjzD/GmEPGmCxjzCJjzL8rKdu/jTGL7fsfsh9/Rk3fs5y6jDETjTGvG2PmGGMy7PX800qO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\n","text/plain":["<Figure size 864x576 with 1 Axes>"]},"metadata":{"tags":[],"image/png":{"width":717,"height":479},"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"2ng0hf308nIN"},"source":["#### 2.4.2 显示测试Loss"]},{"cell_type":"code","metadata":{"id":"-VmzxdBC8nIN","executionInfo":{"status":"ok","timestamp":1605510818152,"user_tz":-480,"elapsed":1909,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}},"outputId":"862719c9-0f72-44df-eed0-75685442d7be","colab":{"base_uri":"https://localhost:8080/","height":496}},"source":["plt.figure(figsize=(12,8))\n","plt.plot(mv_net.losses['test'], label='Test loss')\n","plt.xlabel('Batch')\n","plt.ylabel('Test loss pre batch')\n","plt.legend()\n","_ = plt.ylim()"],"execution_count":39,"outputs":[{"output_type":"display_data","data":{"image/png":"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Bbr11lv129/+VtOmTdP//M//6Mwzz9TnPvc5OY7jW5wrVqyQJJ199tk6+OCDu/3+nHPO0bhx47RixQpdfvnlOvzww/Xd735XkydP1imnnKKLL75YZ599tk4//XQdeuihXf72sssu08SJE3X66afrhz/8ob72ta/pzDPP1LHHHuvb9qSKBDQAAAAAAACA0GmfiuK+++7r83u1tbWSpI9//ONaunSpRo8eralTp2rixImSpBEjRuh3v/udrr/+el/irKqqkiR99KMf7fH37T/fs2dPx88mTJige++9V+PHj++Yx/kDH/iALrnkEt1///36yEc+Ikm66KKLNGXKFD3wwAMaM2aMnn76aUnSqFGjdPfdd+sb3/iGL9uUChLQAAAAAAAAQEj4Pa1FmBxxxBGS9iZ4Dz/88KT+5oQTTtCECRPU2tqqVatWacaMGXrsscd0ww03aMiQIbr66qt9i7O0tLTH3+/YsaPL96S9U2qMHj1ao0ePVlFRkebNm6exY8dq3LhxKigo0Pz58zu+e9555+m8885TXV2dsrKyNGXKFD355JM6//zztWLFCn3uc5/zfJtS0X0SEQAAAAAAAACw3BlnnCFJXZKxyRo4cKBGjRql3//+93rllVckSW+++WbH79tf/NfW1pZxnF/4whckSQsWLFBra2u338+ePVuSdOqpp/b49yNGjNBll12madOm6VOf+pQWLFjQ5UWE7YYMGaJzzjlHDz74oG699VY1Nzfrvffeyzj+TJGABgAAAAAAABA61157rQ4++GDddNNN2rRpU7ffNzc3d0lO5+TkdEyH0dnOnTslqcv8yu0v+issLMw4zmOPPVbf+MY3VFBQoIcffrjL77KysjR+/HgdeeSR+v73vy9J2rVrl9asWdNtOXV1daqtrdXAgQM1aNAgSdK8efN6TGr3tE2mMAUHAAAAAAAAgND57Gc/qzFjxuhnP/uZ/vM//1Pf+ta3dPzxx6ulpUWFhYWaP3++jj76aOXm5kqSXnrpJT399NM666yz9MlPflJHHnmkNm/erMmTJ2vw4MG68cYbO5b95S9/WYceeqgefvhhVVRUaPjw4ZKk6667rstUGcl66qmndOaZZ+rmm2/W9OnT9cUvflFFRUV67bXXNGDAAL3wwgsaOnSoJKm4uFhf+MIXdNJJJ+nzn/+8RowYoerqak2ZMkWlpaW6/vrr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\n","text/plain":["<Figure size 864x576 with 1 Axes>"]},"metadata":{"tags":[],"image/png":{"width":720,"height":479},"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"cxVvFPEWzpX-"},"source":["## **3. 利用模型进行电影推荐**"]},{"cell_type":"markdown","metadata":{"id":"ezM8_KIc8nIZ"},"source":["### 3.1 生成Movie特征矩阵\n","将训练好的电影特征组合成电影特征矩阵并保存到本地"]},{"cell_type":"code","metadata":{"id":"cFPEmeg58nIZ","executionInfo":{"status":"ok","timestamp":1605510909030,"user_tz":-480,"elapsed":63607,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}}},"source":["movie_layer_model = keras.models.Model(inputs=[mv_net.model.input[4], mv_net.model.input[5], mv_net.model.input[6]], \n","                                 outputs=mv_net.model.get_layer(\"movie_combine_layer_flat\").output)\n","movie_matrics = []\n","\n","for item in movies.values:\n","    categories = np.zeros([1, 18])\n","    categories[0] = item.take(2)\n","\n","    titles = np.zeros([1, sentences_size])\n","    titles[0] = item.take(1)\n","\n","    movie_combine_layer_flat_val = movie_layer_model([np.reshape(item.take(0), [1, 1]), categories, titles])  \n","    movie_matrics.append(movie_combine_layer_flat_val)\n","\n","pickle.dump((np.array(movie_matrics).reshape(-1, 200)), open('movie_matrics.p', 'wb'))\n","movie_matrics = pickle.load(open('movie_matrics.p', mode='rb'))"],"execution_count":40,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"P65VdhuO8nIg"},"source":["### 3.2 生成User特征矩阵\n","将训练好的用户特征组合成用户特征矩阵并保存到本地"]},{"cell_type":"code","metadata":{"id":"oD_HWGjW8nIh","executionInfo":{"status":"ok","timestamp":1605511032187,"user_tz":-480,"elapsed":120497,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}}},"source":["user_layer_model = keras.models.Model(inputs=[mv_net.model.input[0], mv_net.model.input[1], mv_net.model.input[2], mv_net.model.input[3]], \n","                                 outputs=mv_net.model.get_layer(\"user_combine_layer_flat\").output)\n","users_matrics = []\n","\n","for item in users.values:\n","\n","    user_combine_layer_flat_val = user_layer_model([np.reshape(item.take(0), [1, 1]), \n","                                                    np.reshape(item.take(1), [1, 1]), \n","                                                    np.reshape(item.take(2), [1, 1]), \n","                                                    np.reshape(item.take(3), [1, 1])])  \n","    users_matrics.append(user_combine_layer_flat_val)\n","\n","pickle.dump((np.array(users_matrics).reshape(-1, 200)), open('users_matrics.p', 'wb'))\n","users_matrics = pickle.load(open('users_matrics.p', mode='rb'))"],"execution_count":41,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"OGaswSaA8nIp"},"source":["### 3.3 开始推荐电影\n","使用生产的用户特征矩阵和电影特征矩阵做电影推荐"]},{"cell_type":"markdown","metadata":{"id":"mgkFlqfU8nIq"},"source":["#### 3.3.1 推荐同类型的电影\n","思路是计算当前看的电影特征向量与整个电影特征矩阵的余弦相似度，取相似度最大的top_k个，这里加了些随机选择在里面，保证每次的推荐稍稍有些不同。"]},{"cell_type":"code","metadata":{"id":"32Sh_cgp7IVi","executionInfo":{"status":"ok","timestamp":1605511189417,"user_tz":-480,"elapsed":741,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}}},"source":["#电影ID转下标的字典，数据集中电影ID跟下标不一致，比如第5行的数据电影ID不一定是5\n","movieid2idx = {val[0]:i for i, val in enumerate(movies.values)}"],"execution_count":44,"outputs":[]},{"cell_type":"code","metadata":{"id":"EdHlwyDj8nIr","executionInfo":{"status":"ok","timestamp":1605511191418,"user_tz":-480,"elapsed":886,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}}},"source":["def recommend_same_type_movie(movie_id_val, top_k = 20):\n","   \n","    norm_movie_matrics = tf.sqrt(tf.reduce_sum(tf.square(movie_matrics), 1, keepdims=True))\n","    normalized_movie_matrics = movie_matrics / norm_movie_matrics\n","\n","    #推荐同类型的电影\n","    probs_embeddings = (movie_matrics[movieid2idx[movie_id_val]]).reshape([1, 200])\n","    probs_similarity = tf.matmul(probs_embeddings, tf.transpose(normalized_movie_matrics))\n","    sim = (probs_similarity.numpy())\n","    #     results = (-sim[0]).argsort()[0:top_k]\n","    #     print(results)\n","        \n","    print(\"您看的电影是：{}\".format(movies_orig[movieid2idx[movie_id_val]]))\n","    print(\"以下是给您的推荐：\")\n","    p = np.squeeze(sim)\n","    p[np.argsort(p)[:-top_k]] = 0\n","    p = p / np.sum(p)\n","    results = set()\n","    while len(results) != 5:\n","        c = np.random.choice(3883, 1, p=p)[0]\n","        results.add(c)\n","    for val in (results):\n","        print(val)\n","        print(movies_orig[val])\n","        \n","    return results"],"execution_count":45,"outputs":[]},{"cell_type":"code","metadata":{"id":"xxElXSEY8nIw","executionInfo":{"status":"ok","timestamp":1605511192720,"user_tz":-480,"elapsed":699,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}},"outputId":"e5207146-76ff-4cac-8876-cea58e2ea84e","colab":{"base_uri":"https://localhost:8080/"}},"source":["recommend_same_type_movie(1401, 20)"],"execution_count":46,"outputs":[{"output_type":"stream","text":["您看的电影是：[1401 'Ghosts of Mississippi (1996)' 'Drama']\n","以下是给您的推荐：\n","2501\n","[2570 'Walk on the Moon, A (1999)' 'Drama|Romance']\n","1398\n","[1422 'Murder at 1600 (1997)' 'Mystery|Thriller']\n","2008\n","[2077 'Journey of Natty Gann, The (1985)' \"Adventure|Children's\"]\n","410\n","[414 'Air Up There, The (1994)' 'Comedy']\n","30\n","[31 'Dangerous Minds (1995)' 'Drama']\n"],"name":"stdout"},{"output_type":"execute_result","data":{"text/plain":["{30, 410, 1398, 2008, 2501}"]},"metadata":{"tags":[]},"execution_count":46}]},{"cell_type":"markdown","metadata":{"id":"15EJvv8r8nI0"},"source":["#### 3.3.2 推荐用户喜欢的电影\n","思路是使用用户特征向量与电影特征矩阵计算所有电影的评分，取评分最高的top_k个，同样加了些随机选择部分。"]},{"cell_type":"code","metadata":{"id":"enDZgX2z8nI0","executionInfo":{"status":"ok","timestamp":1605511196994,"user_tz":-480,"elapsed":717,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}}},"source":["def recommend_your_favorite_movie(user_id_val, top_k = 10):\n","\n","    #推荐您喜欢的电影\n","    probs_embeddings = (users_matrics[user_id_val-1]).reshape([1, 200])\n","\n","    probs_similarity = tf.matmul(probs_embeddings, tf.transpose(movie_matrics))\n","    sim = (probs_similarity.numpy())\n","    #     print(sim.shape)\n","    #     results = (-sim[0]).argsort()[0:top_k]\n","    #     print(results)\n","        \n","    #     sim_norm = probs_norm_similarity.eval()\n","    #     print((-sim_norm[0]).argsort()[0:top_k])\n","    \n","    print(\"以下是给您的推荐：\")\n","    p = np.squeeze(sim)\n","    p[np.argsort(p)[:-top_k]] = 0\n","    p = p / np.sum(p)\n","    results = set()\n","    while len(results) != 5:\n","        c = np.random.choice(3883, 1, p=p)[0]\n","        results.add(c)\n","    for val in (results):\n","        print(val)\n","        print(movies_orig[val])\n","\n","    return results"],"execution_count":47,"outputs":[]},{"cell_type":"code","metadata":{"id":"xrb4MsvZ8nI6","executionInfo":{"status":"ok","timestamp":1605511197937,"user_tz":-480,"elapsed":484,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}},"outputId":"1c757669-0d62-4fc4-9a1a-dcd08a17c78f","colab":{"base_uri":"https://localhost:8080/"}},"source":["recommend_your_favorite_movie(234, 10)"],"execution_count":48,"outputs":[{"output_type":"stream","text":["以下是给您的推荐：\n","2693\n","[2762 'Sixth Sense, The (1999)' 'Thriller']\n","523\n","[527 \"Schindler's List (1993)\" 'Drama|War']\n","1363\n","[1384 'Substance of Fire, The (1996)' 'Drama']\n","2836\n","[2905 'Sanjuro (1962)' 'Action|Adventure']\n","820\n","[831 'Stonewall (1995)' 'Drama']\n"],"name":"stdout"},{"output_type":"execute_result","data":{"text/plain":["{523, 820, 1363, 2693, 2836}"]},"metadata":{"tags":[]},"execution_count":48}]},{"cell_type":"markdown","metadata":{"id":"XNzraC8O8nI-"},"source":["#### 3.3.3 看过这个电影的人还看了（喜欢）哪些电影\n","- 首先选出喜欢某个电影的top_k个人，得到这几个人的用户特征向量。\n","- 然后计算这几个人对所有电影的评分\n","- 选择每个人评分最高的电影作为推荐\n","- 同样加入了随机选择"]},{"cell_type":"code","metadata":{"id":"i7gr9us88nI_","executionInfo":{"status":"ok","timestamp":1605511201178,"user_tz":-480,"elapsed":979,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}}},"source":["def recommend_other_favorite_movie(movie_id_val, top_k = 20):\n","\n","    probs_movie_embeddings = (movie_matrics[movieid2idx[movie_id_val]]).reshape([1, 200])\n","    probs_user_favorite_similarity = tf.matmul(probs_movie_embeddings, tf.transpose(users_matrics))\n","    favorite_user_id = np.argsort(probs_user_favorite_similarity.numpy())[0][-top_k:]\n","    #     print(normalized_users_matrics.numpy().shape)\n","    #     print(probs_user_favorite_similarity.numpy()[0][favorite_user_id])\n","    #     print(favorite_user_id.shape)\n","    \n","    print(\"您看的电影是：{}\".format(movies_orig[movieid2idx[movie_id_val]]))\n","        \n","    print(\"喜欢看这个电影的人是：{}\".format(users_orig[favorite_user_id-1]))\n","    probs_users_embeddings = (users_matrics[favorite_user_id-1]).reshape([-1, 200])\n","    probs_similarity = tf.matmul(probs_users_embeddings, tf.transpose(movie_matrics))\n","    sim = (probs_similarity.numpy())\n","    #     results = (-sim[0]).argsort()[0:top_k]\n","    #     print(results)\n","    \n","    #     print(sim.shape)\n","    #     print(np.argmax(sim, 1))\n","    p = np.argmax(sim, 1)\n","    print(\"喜欢看这个电影的人还喜欢看：\")\n","\n","    if len(set(p)) < 5:\n","        results = set(p)\n","    else:\n","        results = set()\n","        while len(results) != 5:\n","            c = p[random.randrange(top_k)]\n","            results.add(c)\n","    for val in (results):\n","        print(val)\n","        print(movies_orig[val])\n","        \n","    return results"],"execution_count":49,"outputs":[]},{"cell_type":"code","metadata":{"id":"BVb-X2uj8nJC","executionInfo":{"status":"ok","timestamp":1605511201179,"user_tz":-480,"elapsed":557,"user":{"displayName":"Yuxin JIANG","photoUrl":"","userId":"08237551511886881536"}},"outputId":"d7ffbf87-85ea-48cd-a4bd-3fd17918b1b6","colab":{"base_uri":"https://localhost:8080/"}},"source":["recommend_other_favorite_movie(1401, 20)"],"execution_count":50,"outputs":[{"output_type":"stream","text":["您看的电影是：[1401 'Ghosts of Mississippi (1996)' 'Drama']\n","喜欢看这个电影的人是：[[4775 'M' 25 17]\n"," [4644 'M' 50 1]\n"," [155 'M' 35 12]\n"," [4043 'F' 25 15]\n"," [2501 'M' 25 15]\n"," [3959 'F' 45 1]\n"," [85 'M' 18 4]\n"," [2122 'M' 35 12]\n"," [5050 'F' 18 4]\n"," [3150 'F' 25 3]\n"," [3329 'M' 50 18]\n"," [5605 'F' 18 2]\n"," [4067 'M' 45 20]\n"," [3809 'M' 35 6]\n"," [5047 'M' 45 6]\n"," [2696 'M' 25 7]\n"," [1110 'F' 56 6]\n"," [2002 'F' 56 13]\n"," [4144 'M' 18 4]\n"," [2288 'M' 1 10]]\n","喜欢看这个电影的人还喜欢看：\n","900\n","[912 'Casablanca (1942)' 'Drama|Romance|War']\n","1073\n","[1089 'Reservoir Dogs (1992)' 'Crime|Thriller']\n","594\n","[598 'Window to Paris (1994)' 'Comedy']\n","1269\n","[1289 'Koyaanisqatsi (1983)' 'Documentary|War']\n","94\n","[96 'In the Bleak Midwinter (1995)' 'Comedy']\n"],"name":"stdout"},{"output_type":"execute_result","data":{"text/plain":["{94, 594, 900, 1073, 1269}"]},"metadata":{"tags":[]},"execution_count":50}]}]}